【问题标题】:Laravel 4.2 ORM - Querying relation with three tableLaravel 4.2 ORM - 查询三个表的关系
【发布时间】:2015-09-07 05:44:19
【问题描述】:

我有一个这样的数据库架构:

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

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

【问题讨论】:

    标签: php mysql laravel eloquent


    【解决方案1】:

    我认为您可以使用具有多通关系。由于您使用的是 Eloquent,请尝试this example

    【讨论】:

      【解决方案2】:

      您的问题的解决方案是“EAGER LOADING”,让我们看看我们如何根据您的情况使用它。

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

      这不会给您来自该用户的问题,原因是您缺少用户和问题之间的关系。

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

      建议 您的关系和模型不合适,这可能足以满足您的需求,但随着应用程序的增长,您会遇到许多问题。

      如果我这样做,我的关系将会不同,包括数据库结构。例如:

      用户: id、姓名、.....

      问题: id、title、...

      答案: id,答案,...

      UserQuestion:这应该是用户和问题的数据透视表 [user_id, question_id]

      UserAnswer:这应该是 User & Answer [user_id, answer_id] 的数据透视表

      QuestionAnswer:这应该是一个问答[question_id, answer_id]的数据透视表

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

      【讨论】:

        猜你喜欢
        • 2015-08-02
        • 2015-04-18
        • 1970-01-01
        • 2015-01-21
        • 1970-01-01
        • 2015-07-28
        • 2016-02-26
        • 2017-01-11
        • 2015-04-09
        相关资源
        最近更新 更多