Как отсортировать две объединенные коллекции с разными моделями

У меня две модели 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
    }
}
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Laravel Scout - это популярный пакет, который предоставляет простой и удобный способ добавить полнотекстовый поиск в ваше приложение Laravel. Он...
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
0
0
22
1

Ответы 1

Я думаю, вы могли бы сделать такой запрос:

$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

Другие вопросы по теме