PavelUstyugov
@PavelUstyugov
Самозанятый веб-разработчик

Как в laravel к основной таблице присоединить только последние по времени записи?

есть таблицы users и rests (остатки)
остатки соединены с пользователем по id и содержат сумму и дату добавления.

Как соединить таблицу пользователей с таблицей остатков так чтобы туда попадали только последние добавленные записи в рамках user_id ? Вот так это работало бы еслиб не нужно было присоединять только последние записи

$usersLists = User::leftJoin('rests','rests.user_id', '=', 'users.id')->
        select('users.*', 'rests.balans' )->get();
  • Вопрос задан
  • 165 просмотров
Пригласить эксперта
Ответы на вопрос 2
@jazzus
Сделать hasOne отношение в User
public function latestRest()
{
  return $this->hasOne('App\Models\Rest','user_id', 'id')->latest();
}

И потом через with
$users = User::with('latestRest')->get();
Ответ написан
@NubasLol
Не совсем рабочий пример, но суть в том, что бы сделать join от селекта, в котором выбрать одно строку

->leftJoin('rests', function ($leftJoin) {
                return $leftJoin->on('rests.id', '=', DB::raw(
                    '(' .
                    Rests::select('id')
                        ->whereRaw('rests.user_id = users.id')
                        ->oldest()
                        ->limit(1)
                        ->sql()
                    . ')'
                ));
            })
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы