Laravel Eloquent 从一个表中选择并在另一个表中有匹配项时加入第一行

我有2张桌子


+----+------------+------------+

| id | first_name | date       |

+----+------------+------------+

| 1  | Bob        | 01/01/2019 |

+----+------------+------------+

| 2  | June       | 01/05/2019 |

+----+------------+------------+


+----+--------+---------+------------+

| id | userID | comment | date       |

+----+--------+---------+------------+

| 1  | 1      | Hello   | 02/01/2019 |

+----+--------+---------+------------+

| 2  | 1      | Again   | 02/02/2019 |

+----+--------+---------+------------+

| 3  | 2      | Howdy   | 02/03/2019 |

+----+--------+---------+------------+

我想获得所有名字为 Bob 的用户的结果,并将最新的评论附加到该结果。


我可以


$users = SELECT * FROM Users WHERE id = 1

然后


foreach($users as $user){

    $comment = Comment::where("userID", $user->id)->first();

    if($comment != null){

        $user->comments = $comment->$comment;

    }

}

但是,如果 $users 中有很多结果,它会很慢


素胚勾勒不出你
浏览 108回答 2
2回答

开满天机

使用带有自定义查询的预加载:User::with(['comments' => function($query){  $query->latest();}])->where('first_name','bob')->get();

德玛西亚99

额外的关系可以解决问题。public function latestComment(){    return $this->hasOne(Comment::class)->latest('date');}现在您可以使用$user->latestComment.
打开App,查看更多内容
随时随地看视频慕课网APP