Редактировать: я нашел это!Ярек - великий писатель для Eloquent, и я хотел посмотреть, есть ли у него хитрость для этого.Как всегда он делает.:)
$this->load(['friends.mailings.orders' => function($q) use(&$orders){
$orders = $q->get();
}]);
Теперь, если вы dd($orders)
, у вас будет список всех заказов от рассылок от друзей, относящихся к $this
, так что теперь вы можете просматривать эту информацию, чтобы получить то, что вы хотите.
foreach($orders as $order){
$num_orders++
}
На его сайте есть предупреждение о сертификате, но здесь я получил вышеупомянутое.https://softonsofa.com/laravel-querying-any-level-far-relations-with-simple-trick/
Пожалуйста, не обращайте внимания на нижеследующее, так как оно больше не нужно, но я держу его здесь для ясности и потому, что оно было принято в качестве ответа.
Вы можете использовать метод сбора each()
для очистки ваших циклов.Поскольку существует отношение «многие ко многим», вы не можете получить доступ к отношениям связанных моделей, если не выполните итерацию по ним или не укажите, какой связанный элемент вы хотите.См. Ниже:
$this->friends->each(function($friend, $key){
$friend->each(function($mailing, $key2){
$mailing->orders->each(function($orders, $key3){
$num_orders++;
})
});
})
https://laravel.com/docs/5.8/collections#method-each
Существует также метод построения запросов withCount()
, который вы можете рассмотреть.Кажется, ему не нравятся вложенные отношения с использованием обычной точечной нотации, но я недостаточно использовал ее, чтобы сказать, можно ли ее использовать здесь.Я наткнулся на Laravel 5.3 с вложенным отношениемCount () , глядя на часть withCount()
.Похоже, это возможно, но вам придется изменить свои отношения на hasManyThrough()
.Это должно быть хорошее место для начала.