首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Laravel 5:数据库关系查询

Laravel 5:数据库关系查询
EN

Stack Overflow用户
提问于 2016-09-03 05:49:36
回答 2查看 80关注 0票数 0

用户->有很多问题->有很多答案

我想为每个问题显示一个最新答案的用户问题信息。

代码语言:javascript
复制
$questions = Question::select('id','user_id',
            'title','video','status','created_at')
            ->where('user_id','=',$user->id)
            ->where('status','>=','2')
            ->with([
                'user' => function($query){
                    $query->select('id','name','picture');
                },
                'answers' => function($query){
                    $query->select('id','question_id','user_id','answer','created_at',DB::raw('count(*) as answer_count'))
                    ->orderBy('created_at','desc')->first();

                },
            ])->get();

在这里,我没有得到每个问题的答案。我得到了用户提交的所有问题的答案

你能帮帮我吗?如何将放在解答的问题id上

预期产出:

代码语言:javascript
复制
User [id, name, and so on ] -> 
question [
    ['id', 'title' ..]->Answer['id','question_id',etc ],
    ['id', 'title' ..]->Answer['id','question_id',etc ]
]

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-09-10 15:11:32

代码语言:javascript
复制
$questions = Question::select('id','user_id','title','video','status','created_at')->with([
            'user' => function($query){
                $query->select('id','name','picture');
            }
        ])->where('status','>=','2')->get();

        foreach($questions as $question)
        {
            $question_data[] = [
                'id' => $question->id,
                'title' => $question->title,
                'video' => $question->video,
                'user_id' => $question->user_id,
                'status' => $question->status,
                'created_at' => $question->created_at->toDateTimeString(),
                'thumbnail' => $question->thumbnail,
                'user' => [
                    'id' => $question->user->id,
                    'name' => $question->user->name,
                    'picture' => $question->user->picture
                ],
                'answers' => 
                $question->answers()->select('video','question_id','user_id','created_at','thumbnail')
                ->with([
                    'user' => function($query){
                        $query->select('id','name','picture');
                    }
                ])->orderBy('created_at','desc')->first()];
        }
票数 0
EN

Stack Overflow用户

发布于 2016-09-03 06:16:20

您需要从获取用户的问题和答案开始,而不是从问题本身开始,以获得预期的输出:

代码语言:javascript
复制
$user = User::select('id','name','picture')->with([
            'questions' => function($query){
                $query->select('id','user_id','title','video','status','created_at');
                $query->where('status','>=','2');
            },
            'questions.answers' => function($query){
                $query->select('id','question_id','user_id','answer','created_at',DB::raw('count(*) as answer_count'));
                $query->orderBy('created_at','desc')->first();

            },
        ])->findOrFail($user_id);

现在,您应该能够得到所有的问题,由给定的用户和他们的最新答案如下:

代码语言:javascript
复制
foreach($user->questions as $question) {
  $answer = $question->answers;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39303689

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档