Как в построителе запросов laravel получить количество дочерних строк, которые удовлетворяют определенному условию, для каждой записи в родительской таблице? - PullRequest
0 голосов
/ 07 ноября 2018

У меня есть таблица 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?

Ответы [ 2 ]

0 голосов
/ 07 ноября 2018

В ваших сообщениях Модель

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)`
0 голосов
/ 07 ноября 2018

Классический метод

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

//count of messages

$count = $messages->count();

Но вы также можете использовать relations для получения сообщений пользователей и их количества. Пожалуйста, следуйте Laravel: Отношения

...