Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 16.02.2015 16:00:57

Eloquent: Пользователи, Сообщения, Лайки

Здравствуйте.
Есть три таблицы: users (id, name), messages(id, user_id, text), likes(id, message_id, user_id)

Теперь я хочу получить 20 последних сообщений и при этом наиболее разумным способом для каждого сообщения получить, лайкал ли текущий пользователь его.

Как это можно сделать без ORM - я понимаю. Получаю последние 20 сообщений (мне они и так нужны). Выбираю из них их ID в массив. Запрашиваю у таблицы "likes" все лайки сделанные ЭТИМ пользователем, где message_id IN (массив ИД-шек),  потом связать это уже не проблема.

Как это сделать с ОРМ - я тоже знаю, но мне не нравится. У каждого объекта message можно сделать метод isLikedByUser($uid), который будет стучаться в базу за каждой парой (user_id, message_id), но это 20 дополнительных запросов.

Собственно поэтому и хочу узнать каким образом в Ларавеле лучше всего организовать такие связи, чтоб это было и логично с т.з. парадигм ОРМ и ненапряжно для базы. Реальные таблицы содержат гораздо больше всяких данный, и выбираются не 20, а скажем порядка 100 сообщений.

Изменено AlSirik (16.02.2015 16:01:39)

Не в сети

#2 19.02.2015 06:33:37

Re: Eloquent: Пользователи, Сообщения, Лайки

Так есть же активная загрузка отношений:

Message::with('название отношения')->...

И не будет кучи запросов.

Не в сети

#3 21.02.2015 18:25:13

Re: Eloquent: Пользователи, Сообщения, Лайки

Но ведь "with" это всего лишь присоединение другой модели и это никак не подходит для

Теперь я хочу получить 20 последних сообщений и при этом наиболее разумным способом для каждого сообщения получить, лайкал ли текущий пользователь его.

хотя... если с замыканием...

$curuser_id = 4;
$messages= Message::with(['likes' => function($query) use ($curuser_id)
{
    $query->where('user_id', '=',$curuser_id)->limit(1);
}])->orderBy('created_at','DESC')->limit(20)->get();

Получаем все посты независимо от автора, но с непустым likes, если есть лайк от пользователя с id = "$curuser_id".
Может и помочь. Или это неправильно?

Изменено AlSirik (21.02.2015 18:27:46)

Не в сети

#4 22.02.2015 07:07:30

Re: Eloquent: Пользователи, Сообщения, Лайки

Почему неправильно? Если запрос правильно составляется, и данные правильно вытягиваются, значит правильно. smile

Не в сети

Подвал раздела