Laravel hasManyThrough - 没有返回所有预期的结果

时间:2017-09-25 12:20:48

标签: laravel laravel-5 eloquent has-many-through

我在Laravel项目中有两个表surveyquestion。我想创建一个hasManyThrough雄辩的关系,这样我就可以遍历所有属于调查的问题。

调查表:

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

问题表:

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

SurveyQuestion表:

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

在我的调查模型中,我目前有以下

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...
    );
}

在我的SurveyQuestion模型中,我有:

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

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

然而,当我遍历$survey->questions时,它只返回当question_id为1时的行?我做错了什么?

2 个答案:

答案 0 :(得分:1)

这是一个多对多的关系。

调查模型

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

问题模型

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

然后你可以

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

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

答案 1 :(得分:0)

参考docs

遵循hasManyThrough的结构,你需要有这样的结构

  

<强>调查       id - 整数       name - string

     

<强>问题       id - 整数       survey_id - 整数       name - string

     

<强> SurveyQuestion       id - 整数       question_id - 整数       title - string

但是你的中间表中没有外键可以先解决这个问题,然后我猜你会解决这个问题。