Получение отношений из отношений в Laravel - PullRequest
2 голосов
/ 05 мая 2020

У меня есть приложение, использующее Laravel 7. В нем у меня есть модель «Учетная запись», эта модель имеет несколько «Профилей», и каждый «Профиль» имеет несколько «Продуктов».

Как можно Я получаю все «Продукты», прикрепленные к определенным «Учетным записям» оптимальным образом.

В настоящее время я загружаю все «Профили», связанные с этой «Учетной записью», а затем все «Продукты», связанные с каждым » Профиль". Но я не считаю это оптимизированным и у меня возникают трудности с сортировкой возвращаемых данных (в порядке убывания).

Я уверен, что Eloquent / Laravel позволяет восстановить это напрямую, но я не знаю как.

Спасибо вам!

Ответы [ 2 ]

4 голосов
/ 05 мая 2020
Account::with(['profiles','profiles.products'])->get();
3 голосов
/ 05 мая 2020

eloquent имеет отношение 'Has Many Through' только для такого рода случаев, в вашей модели учетной записи вы можете написать что-то вроде:

class Account extends Model
{
public function products()
{
return $this->hasManyThrough(Product::class, Profile::class);
}
}

теперь вы можете получить весь продукт для указанной учетной записи, например:

$myAccountProducts=Account::find($account_id)->products()->get();

вы также можете указать внешние ключи ...

подробнее в:

https://laravel.com/docs/7.x/eloquent-relationships#has -many-through

...