У меня две модели Cities и States. Один City имеет 1 State, а один State может иметь 0 или более Cities. Мне нужно получить все Cities и States по отдельности, потому что мне нужно отображать штаты, даже если штат не имеет связанных городов (например, Алабама в приведенном ниже примере). Проблема в том, что мне нужно сначала отсортировать по названию штата, а затем по городам в этом штате (если они есть)
Города
id, state_id, name
1, 1, San Diego
2, 1, Hollywood
3, 2, Seattle
4, 3, Pheonix
состояния
id, name
1, California
2, Washington
3, Arizona
4, Alabama
Контроллер:
$cities = Cities::with('state')->get(); // Returns the state relationship
$states = States::get();
$merged = $states->merge($cities);
Теперь я хотел бы сначала отсортировать по имени State, а затем по всем городам в этом State и вернуть объединенную коллекцию, подобную этой:
{
id: 4,
name: Alabama,
},
{
id: 3,
name: Arizona,
},
{
id: 3,
name: Pheonix,
state_id: 3
state: {
id: 3,
name: Arizona
}
},
{
id: 1,
name: California
},
{
id: 2,
name: Hollywood
state_id: 1,
state: {
id: 1,
name: California
}
},
{
id: 1,
name: San Diego,
state_id: 1,
state: {
id: 1,
name: California
}
},
{
id: 2,
name: Washington,
},
{
id: 2,
name: Seattle,
state_id: 2,
state: {
id: 2,
name: Washington
}
}






Я думаю, вы могли бы сделать такой запрос:
$states = State::all()->sortBy('name'); // Here your sort by the state name first
Если вы сделали правильные отношения, вы можете получить доступ к городам из каждого штата следующим образом: (вам не нужно объединять коллекции):
@foreach($states as $state) // this will sort the cities by id
{{$state->cities}}
@endforeach
Чтобы отсортировать их по имени, вы можете попробовать следующее:
@foreach($states as $state)
{{$state->cities->sortBy('name')}}
@endforeach