Как отсортировать две объединенные коллекции с разными моделями - PullRequest
0 голосов
/ 30 января 2019

У меня есть две модели 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
    }
}

1 Ответ

0 голосов
/ 30 января 2019

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

$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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...