как отсортировать слитый объект в laravel - PullRequest
0 голосов
/ 28 октября 2019

У меня есть 2 объекта, которые я использую для слияния, как показано ниже:

$data = $city->merge($accommodation);
        return AccCitySearchResource::collection($data);

и в моем ресурсе

 return [
            'id' => $this->id,
            'name' => $this->name,
            'english_name' => $this->english_name,
            'accommodation_type_id' =>$this->accommodation_type_id,
            'grade_stars' =>$this->grade_stars,
            'hits' =>$this->hits,
            'accommodation_count' => $this->accommodation_count,
        ];

теперь все, что я хочу, - это то, что мои $data сначала отображаютсявсе города, а затем показывает все места проживания, но теперь он показывает все вместе, есть ли способ их отсортировать ??

РЕДАКТИРОВАТЬ

Это то, что я получаю сейчас

{
id: 5,
name: "hotel",
accommodation_type_id: 1,
grade_stars: 4,
hits: 22,
accommodation_count: null
},
{
id: 7,
name: "city",
accommodation_type_id: null,
grade_stars: null,
hits: null,
accommodation_count: 0
},
{
id: 10,
name: "hotel",
accommodation_type_id: 1,
grade_stars: 2,
hits: 0,
accommodation_count: null
},

И это то, что я хочу

{
id: 5,
name: "hotel",
accommodation_type_id: 1,
grade_stars: 4,
hits: 22,
accommodation_count: null
},
{
id: 10,
name: "hotel",
accommodation_type_id: 1,
grade_stars: 2,
hits: 0,
accommodation_count: null
},
{
id: 7,
name: "city",
accommodation_type_id: null,
grade_stars: null,
hits: null,
accommodation_count: 0
},

, просто чтобы упомянуть, поскольку сначала появляются все отели, а затем все города.

Ответы [ 3 ]

0 голосов
/ 28 октября 2019

Вы можете использовать sortBy Метод сбора

Создание коллекции ресурсов для модели. Затем в методе toArray напишите:

/**
 * Transform the resource collection into an array.
 *
 * @param  \Illuminate\Http\Request  $request
 * @return array
 */
public function toArray($request)
{
    return [
        'data' => $this->collection->sortByDesc(function($d){
            return (int) ($d['name'] == 'hotel');
        }),
    ];
}

Это отсортирует ваши данные так, как вы хотите. Надеюсь, что этот ответ поможет вам

0 голосов
/ 28 октября 2019

Может быть, что-то вроде этого ... Но если вы получаете свои данные из базы данных, возможно, вы могли бы присоединиться и заказать запрос вместо этого.

$data = $city->merge($accommodation)->sortByDesc('some field of first object here');
0 голосов
/ 28 октября 2019

В документации рекомендуется создать собственную коллекцию ресурсов, если вам нужно настроить поведение по умолчанию:

php artisan make:resource AccCitySearchCollection

Затем вы можете настроить свою коллекцию:

class AccCitySearchCollection{
    public function toArray($request)
    {
        return [
            'data' => $this->collection->sortBy('name')
        ];
    }
}

Затем вы можете вернуть экземпляр коллекции:

$data = $city->merge($accommodation);
return new AccCitySearchCollection($data);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...