【问题标题】:Laravel manytomany relationships retrieving dataLaravel 多对多关系检索数据
【发布时间】:2017-01-17 13:27:06
【问题描述】:

用户有多个问题,问题有多个用户。
问题有多个答案。
用户有多个答案。
关系在模型中设置。

表格

questions --> id   question
answers --> id q_id user_id answer
users --> id email username
question_user --> user_id q_id

我如何检索特定问题的特定用户给出的答案。

这样我可以得到用户的答案和问题:

$users=User::where(['id'=>1])->with('questions','answers')->get(); 
foreach($users as $user)
{
    foreach($user->questions as $question)
    {
        echo "<pre>";print_r($question->question);                      
    }

    foreach($user->answers as $answer)
    {
        echo "<pre>";print_r($answer->answer);          
    }
}

这样我可以得到用户的问题,但问题的所有答案。

$users=User::where(['id'=>1])->with('questions','answers')->get(); 
        foreach($users as $user)
        {
            foreach($user->questions as $question)
            {
                echo "<pre>";print_r($question->question);  
                foreach($question->answers as $answer)
                {
                    echo "<pre>";print_r($answer->answer);
                }                   
            }
        }

但是我在获取特定用户的问题和特定用户对问题的回答时遇到了麻烦。这样
我需要的结果

user id=1.
question 1
answer by user id 1.
question 2
answer by user id 1
...



 user id=2.
 question 1
 answer by user id 2.
 question 2
 answer by user id 2
   ...

【问题讨论】:

  • 这是你的问题,请检查答案[LINK] (stackoverflow.com/questions/39113682/…)
  • 我无法理解您想要什么。您知道问题,也了解用户,您需要找到用户对问题给出的答案?

标签: laravel laravel-5.2


【解决方案1】:

你来了

// User model
public function answeredQuestions()
{
  return $this->belongsToMany(Question::class, 'answers', 'user_id', 'question_id');
}

// then
$user->answeredQuestions()->find($question_id)->pivot->answer;

// or to make it 'safe' - no Trying to get property on non-object if no answer is found
data_get($user->answeredQuestions()->find($question_id), 'pivot.answer');

【讨论】:

  • 我已经和 answer 有很多关系,并且 belongsToMany 和 questions 这又是一个功能吗?
  • @Steve 是的,基本上你的answers 表链接了usersquestions,所以我们可以将它用作数据透视表。您可以通过$user-&gt;answers()-&gt;where('question_id', $question_id)-&gt;first() 实现相同的目标 - 这将是您正在寻找的问题的答案。
【解决方案2】:

试试这个

foreach($users as $user)
    {
        foreach($user->questions as $question)
        {
            echo "<pre>";print_r($question->question);  
            foreach($question->answers as $answer)
            {
                  echo "<pre>";print_r($answer->filter(function ($answer) use ($user) {
                    return $answer->user_id== $user->id;
                });
            }                   
        }
    }

【讨论】:

    猜你喜欢
    • 2023-03-12
    • 1970-01-01
    • 2017-05-25
    • 2019-08-17
    • 1970-01-01
    • 2020-03-26
    • 1970-01-01
    • 2014-04-18
    • 2021-04-06
    相关资源
    最近更新 更多