【问题标题】:How to join tables in laravel 5.4如何在 laravel 5.4 中加入表格
【发布时间】:2017-07-29 16:12:25
【问题描述】:

就我而言,我有 3 个表格,例如问题、选项和答案

问题表

|id      |     question_name|
------------------------------
      1          question1
      2          question2 
      3          question3

选项表

id  |     question_id     |   options |
----------------------------------------
1           1                   option1
----------------------------------------
1           1                   option2
----------------------------------------
1           1                   option3
----------------------------------------
1           1                   option4

答案表

id   |   customer_id |   question_id | answer(selected by user) |
--------------------------------------------------------------------
 1               1              1               option1          
--------------------------------------------------------------------
 1               2              2               option2            
--------------------------------------------------------------------
 1               1              3               option3    
--------------------------------------------------------------------
 1               1              3               option2           

如何使用连接表从答案中获得以下输出
对于客户 1

 question1
    --option1
 question2
    --option2
 question3
    --option3
    --option2

我有口才,

 Question model 
    class Question extends Model
    {
        public function options()
        {
            return $this->hasMany(Option::class);
        }
        public function customer()
        {
            return $this->belongsTo(CustomerProfile::class);
        }
        public function answers()
       {
            return $this->hasMany(Answer::class);
       }
    }

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

   Answer model 
      public function customer()
      {
          return $this->belongsTo(CustomerProfile::class);
      }
      public function question()
      {
          return $this->belongsTo(Question::class);
      }

这就是我的关系的样子,现在我只需要加入表格即可获得输出。

【问题讨论】:

  • 什么是雄辩的关系?能否请您发布您的代码。
  • 你读过docs吗?
  • @fubar 是的,我已阅读。

标签: laravel laravel-5 laravel-5.2 laravel-5.3 laravel-5.4


【解决方案1】:

为了获得您问题的相关选项,您可以使用eager loading

一个例子是:

$questions = Question::with('options')->get();

然后,您将获得一个包含问题及其相关选项的集合。你需要构造一个循环来获取你想要的数据。

【讨论】:

  • 其实我需要根据客户id从answers表中获取数据,输出应该是question1 --option1 question2 --option2 question3 --option3 --option2
  • Question::with('answers')->get(); 应该是你想要的那么
  • 我想要的是客户已经回答了 3 个问题并且答案表中提供了该数据,现在我需要从答案表中获取该数据,如果我说客户 id 1 它应该显示所有问题回答客户 1 已回答的问题。
【解决方案2】:

离开您在 Aaron Fahey 的回答中留下的评论,您需要为查询和急切加载添加一个约束:

$customerId = 1; 

$questions = Question::with([
    'options', 'answers' => function ($query) use ($customerId) {
        $query->where('customer_id', $customerId);
    }])
    ->whereHas('answers', function ($query) use ($customerId) {
        $query->where('customer_id', $customerId);
    })
    ->get();

https://laravel.com/docs/5.4/eloquent-relationships#constraining-eager-loads

https://laravel.com/docs/5.4/eloquent-relationships#querying-relationship-existence

希望这会有所帮助!

【讨论】:

    【解决方案3】:

    我猜,您还在 Customer Model 类中定义了雄辩的关系。 如果这样做,那么您可以通过客户模型检索特定客户的所有答案,这将为您提供获取答案问题及其所有选项的钩子:

    $customer = Customer::find($customerId);
    $answer = $customer->answers()->where('id', $answerId)->get();
    
    $question = $answer->question;
    
    $questionOptions = $question->options;
    

    我希望它会有所帮助。

    【讨论】:

    • 你好@asmmahmud 谢谢你的回答,但是那个变量 $answerId 是什么,
    • 如果您想为特定客户找到特定答案,那么您可以使用 $answerid。但是,您可以以其他方式使用它: $allAnswers = $customer->answers; .这将为您提供特定客户的所有答案。
    猜你喜欢
    • 2021-06-14
    • 1970-01-01
    • 2020-03-29
    • 2013-10-12
    • 2019-11-01
    • 1970-01-01
    • 2017-10-11
    • 2019-04-15
    • 1970-01-01
    相关资源
    最近更新 更多