У меня есть сводная таблица, которая использовалась для объединения двух других таблиц, которые имеют много отношений для hotel_id. Есть ли способ, которым я могу загрузить отношения, которые вытягивают результаты для обеих таблиц в одном отношении? Исходный SQL-запрос работает корректно, но при использовании ownToMany заказ выключен.Laravel Eager Load и Group Multiple Joins on Pivot
населённого Сводная таблица
id
hotel_id
distance_id
type_id
Расстояние Таблица
id
name
Тип Таблица
id
name
RAW Query (Это работает отлично)
SELECT * FROM amenities a
LEFT JOIN distance d ON a.distance_id = d.id
LEFT JOIN type t ON a.type_id = t.id WHERE a.hotel_id = ?
Мой «Отели» Модель использует belongsToMany как и
public function distance() {
return $this->belongsToMany('Distance', 'amenities', 'hotel_id', 'distance_id');
}
public function type() {
return $this->belongsToMany('Type', 'amenities', 'hotel_id', 'type_id');
}
Это выводит коллекцию, но они не правильно группироваться. Мне нужно зацикливать их в выбранных полях рядом друг с другом, как указано в сводной таблице, поэтому пользователь может выбрать «тип» и «расстояние», но при использовании коллекции порядок отменяется. Исходный запрос выше выводится правильно.
Hotels::where('id','=','200')->with('distance', 'type')->take(5)->get();
Ok Решено. Поэтому, видимо, вы можете использовать orderBy на сводной таблице. Если кто-то еще имеет эту проблему, это то, что я сделал в обеих отношениях.
public function distance() {
return $this->belongsToMany('Distance', 'amenities', 'hotel_id', 'distance_id')->withPivot('id')->orderBy('pivot_id','desc');
}
public function type() {
return $this->belongsToMany('Type', 'amenities', 'hotel_id', 'type_id')->withPivot('id')->orderBy('pivot_id','desc');
}
Интересно, не знал, что вы можете это сделать. Спасибо за это, это полезно. Я думаю, что буду использовать область действия, поскольку она будет использоваться довольно часто. – limit