为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
素胚勾勒不出你 2023-03-04 18:08:22
我有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 中有很多结果,它会很慢
查看完整描述

2 回答

?
开满天机

TA贡献1786条经验 获得超13个赞

使用带有自定义查询的预加载:


User::with(['comments' => function($query){

  $query->latest();

}])->where('first_name','bob')->get();


查看完整回答
反对 回复 2023-03-04
?
德玛西亚99

TA贡献1770条经验 获得超3个赞

额外的关系可以解决问题。


public function latestComment()

{

    return $this->hasOne(Comment::class)->latest('date');

}

现在您可以使用$user->latestComment.


查看完整回答
反对 回复 2023-03-04
  • 2 回答
  • 0 关注
  • 107 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信