Laravel Индивидуальный заказ Eloquent - PullRequest
0 голосов
/ 06 июня 2019

В течение некоторого времени я пытался выяснить, как добиться индивидуального заказа в моем eloquent (коллекции?): Это моя коллекция (обратите внимание, что я не использовал -> get (), потому что в последней части функции я использую это для расширения запроса / коллекции)

$ads = Ad::whereIn('ad_type',[2,3,1]); <-- This is my Desired Output as well.

В моей таблице объявлений есть несколько элементов с каждым типом объявления.

Итак, я попробовал:

$ads1 = Ad::where('ad_type',1);
$ads2 = Ad::where('ad_type',2);
$mergedAds = $ads1->merge($ads2);

Но я просто получаю:

'Call to undefined method Illuminate\Database\Query\Builder::merge()'

Затем я попытался оставить $ ads1 как есть и добавить:

            $ads2 = sortBy(function($ads) use ($ad_types) {
            return array_search($ads->getKey(), $ad_types);
        });

но это не массив, так что это не сработает. Кто-нибудь может направить меня в правильном направлении? И, возможно, объясните, в чем может быть разница между Collection, Eloquent Collection и Query, чтобы я мог лучше понять это. Огромное спасибо заранее. (Почему я задаю этот вопрос: я видел людей, делающих collect () или new Collection (), и я не знаю, что это такое, также я не нашел ничего полезного)

1 Ответ

2 голосов
/ 06 июня 2019

Относительно этого куска кода.

$ads1 = Ad::where('ad_type',1);
$ads2 = Ad::where('ad_type',2);
$mergedAds = $ads1->merge($ads2);

$ ads1 и $ ads2 называются двумя запросами, а не фактическими результатами. Чтобы получить фактические результаты:

$ads1 = Ad::where('ad_type',1)->get();
$ads2 = Ad::where('ad_type',2)->get();
$mergedAds = $ads1->merge($ads2);

Я предполагаю, что вы хотите отсортировать объявления по типу объявления в порядке 2, 3, 1. Я перехожу по этой ссылке:

Как определить заказ ORDER BY в mySQL

Так что в Laravel это может сработать:

    $ads = Ad::sortByRaw("FIELD(Language, 2, 3, 1)")->get();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...