2017-09-25 3 views
0

J'ai deux tables survey et question dans un projet Laravel. Je veux créer une relation éloquente hasManyThrough afin que je puisse boucler toutes les questions qui ont appartenu à l'enquête.Laravel hasManyThrough - ne pas retourner tous les résultats attendus

Enquête Tableau:

---------------- 
| id | title | 
---------------- 
| 1 | fruit | 
---------------- 

Question Tableau:

---------------- 
| id | title | 
---------------- 
| 1 | apple? | 
| 3 | banana? | 
| 4 | kiwi? | 
| 5 | pear? | 
---------------- 

table SurveyQuestion:

-------------------------------- 
| id | survey_id | question_id | 
-------------------------------- 
| 1 | 1   | 1   | 
| 1 | 1   | 4   | 
| 1 | 1   | 5   | 
-------------------------------- 

Dans mon modèle d'enquête J'ai actuellement les suivantes

public function questions() 
{ 
    return $this->hasManyThrough(
     Questions::class, 
     SurveyQuestion::class, 
     'question_id', // Foreign key on surveyquestion table... 
     'id', // Foreign key on questions table... 
     'id', // Local key on survey table... 
     'survey_id' // Local key on surveyquestion table... 
    ); 
} 

et dans mon modèle SurveyQuestion J'ai:

public function survey() 
{ 
    return $this->belongsTo(Survey::class); 
} 

public function question() 
{ 
    return $this->belongsTo(Questions::class); 
} 

Cependant quand je boucle à travers $survey->questions il est seulement retournais la ligne quand question_id est 1? Qu'est-ce que j'ai mal fait?

+1

Votre sondage et votre tableau de questions ne contiennent aucune relation. Vérifiez que: https://laravel.com/docs/5.5/eloquent-relationships#has-many-through –

+0

@MahfuzShishir merci en utilisant plusieurs à plusieurs relation suggéré par Morteza résolu mon problème. – xylar

Répondre

1

C'est une relation de plusieurs à plusieurs.

Modèle Enquête

public function questions() 
{ 
    return $this->belongsToMany(Question::class, 'survey_question'); 
} 

Question Modèle

public function surveys() 
{ 
    return $this->belongsToMany(Survey::class, 'survey_question'); 
} 

Ensuite, vous pouvez

$survey = Survey::with('questions')->find($id); 

@foreach($survey->questions as $question) 
    //... 
@endforeach 
+0

@xylar ne pas oublier de voter vers le haut. –

0

Reportez-vous à la docs

Suite à la structure hasManyThrough vous devez avoir une structure comme celui-ci

Survey id - entier nom - chaîne

Question id - entier survey_id - entier nom - chaîne

SurveyQuestion id - entier question_id - entier titre - chaîne

Mais vous n'avez pas de clé étrangère dans votre table intermédiaire fixer ce premier puis je suppose que vous vous débarrasser de ce problème.