我有一个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的查询生成器来达到此结果?
答案 0 :(得分:1)
经典方法是
// messages
$messages = Messages::where('isRead',0)->where('to_id',auth()->user()->id)->get();
//count of messages
$count = $messages->count();
但是您也可以使用relations
来获取有关用户及其人数的消息。
请关注Laravel:Relations
答案 1 :(得分:0)
在您的消息模型上
public function user(){
return $this->belongsTo('App\User','to_id','id');
}
在您的控制器上
//For All Data
$messages = Messages::with('user')->where(['isRead'=>0,'to_id'=>1])->get();
//For Count Data
you can easily check how much unread message by `count($messages)`