首页 > 解决方案 > 如何在 laravel 查询生成器中,为父表中的每条记录获取满足特定条件的子行数?

问题描述

我有一个users表和一个messages存储用户相互发送消息的表。用户表:

-------------------
|id|name  |lastName|
|------------------|
|1 |emma  |watson  |
|2 |taylor|swift   |
|3 |tiger |woods   |

按摩台:

|id|messageBody|from_id|to_id|isRead|
|-----------------------------------|
|1 |...        |1      |2    |0     |
|2 |...        |2      |3    |1     |
|3 |...        |1      |3    |0     |

我寻求的是获取所有用户的列表和他们发送给当前用户的未读消息的数量,在 laravel 中通过 auth()->user() 到达。我意识到对此的 sql 查询是这样的:

SELECT users.id,users.name,users.lastName,(select count(*)
from messages where messages.from_id = users.id and messages.to_id =1 and 
messages.isRead = 0) as countOfNewMessages FROM users

但是我怎样才能用 laravel 的查询生成器达到这个结果呢?

标签: laravellaravel-query-builder

解决方案


经典的方法是

// messages
$messages = Messages::where('isRead',0)->where('to_id',auth()->user()->id)->get();

//count of messages

$count = $messages->count();

但您也可以relations用来获取用户的消息及其计数。请关注Laravel:关系


推荐阅读