получить последний элемент отношений Pivot - PullRequest
0 голосов
/ 05 июля 2019

У меня есть основные отношения, как показано ниже:

public function users()
{
    return $this->belongsToMany(User::class,'pet_owners','pet_id','owner_id');
}

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

$pets = Pet::with('users')->get();
return new PetResource($pets);

здесь я хочу показать всех питомцев с последней записью пользователя для этого питомца в сводной таблице

Ответы [ 2 ]

2 голосов
/ 05 июля 2019

Вы можете использовать этот способ,

    $pets = Pet::whereHas('users', function($q){
        $q->orderBy('id', 'DESC');
    })->get();
    return new PetResource($pets);
    // return latest record of pivot table
1 голос
/ 05 июля 2019

Ограничение энергичных нагрузок, к сожалению, нелегко сделать с помощью Eloquent.С репозиторием Github связано много вопросов.Вы можете прочитать эту ветку для обзора.

Один из авторов Laravel выпустил пакет staudenmeir / eloquent-eager-limit , чтобы упростить ограничение активных нагрузок.Вы можете установить его с помощью:

composer require staudenmeir/eloquent-eager-limit:"^1.0"

Вам необходимо добавить черту \Staudenmeir\EloquentEagerLimit\HasEagerLimit; для моделей Pet и User.Тогда вы сможете использовать метод limit в запросе внутри метода with в вашей модели:

$pets = Pet::with(['users' => function ($query) {
   return $query->latest()->limit(1);
}])->get();
...