Laravel 4.2 ORM - 查询与三个表的关系

时间:2015-09-07 05:44:20

标签: php mysql laravel laravel-4 laravel-orm

我有一个类似这样的数据库模式:

user
  id
  name

question
  id
  title


answer
  id
  answer_text
  user_id
  question_id

现在我想选择所有问题的用户和每个问题答案的用户。

我正在尝试这种方式:

用户模型

public function answer()
{
    return $this->hasMany('answers','user_id','question_id');
}

答案模型

public function question()
{
    return $this->belongsTo('questions','question_id');
}

现在从用户控制器调用

$user_profile = User::find($userid);

但它只提供用户表格数据,不会回答问题和答案。

2 个答案:

答案 0 :(得分:0)

我认为你可以使用has-many-through关系。由于您使用的是Eloquent,请尝试使用this example

答案 1 :(得分:0)

您的问题的解决方案是" EAGER LOADING" ,让我们看看我们如何在您的情况下使用它。

$user_profile = User::with('answer')->find($userid);

这不会给你那个用户的问题,原因是你错过了用户和问题之间的关系。

上面说的你可以得到答案,因为每个答案都与问题有关,你可以得到问题但不是理想的方式。

<强>建议 你的关系和模型是不合适的,它可能足以满足你的需求,但随着你的应用程序的增长,你会遇到很多问题。

如果我愿意这样做,我的关系会有所不同,包括db结构。例如:

用户: id,name,.....

问题: id,title,...

答案: id,answer,...

UserQuestion:这应该是User&amp; amp;问题[user_id,question_id]

UserAnswer:这应该是User&amp; amp;的透视表。回答[user_id,answer_id]

QuestionAnswer:这应该是问题与解决方案的数据透视表。回答[question_id,answer_id]

您可以使用User_Question_Answer [user_id,question_id,answer_id]来获得这些数据透视表的不同情况,但它取决于您的应用程序需求。