Laravel по-русски

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

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

#1 Re: Laravel 4 » Eloquent: Пользователи, Сообщения, Лайки » 21.02.2015 18:25:13

Но ведь "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".
Может и помочь. Или это неправильно?

#2 Laravel 4 » Eloquent: Пользователи, Сообщения, Лайки » 16.02.2015 16:00:57

AlSirik
Ответов: 3

Здравствуйте.
Есть три таблицы: 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 сообщений.

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