Сортировка свернутых коллекций в Laravel / Lumen Eloquent - PullRequest
0 голосов
/ 25 июня 2018

Я пытаюсь свернуть (объединить) коллекции Laravel из 3 разных запросов, а затем отсортировать их по одному и тому же ключу «recordTime».Поскольку каждый запрос обращается к разным таблицам, я не уверен, есть ли способ использовать orderBy как обычный запрос.Вот мой код:

 $books = $targetItem->books()->whereBetween('recordTime', [$from, $to])->get();
 $magazines = $targetItem->magazines()->whereBetween('recordTime', [$from, $to])->get();
 $articles = $targetItem->articles()->whereBetween('recordTime', [$from, $to])->get();

 $collection = collect([$books, $magazines, $articles]);
 $collapsed = $collection->collapse();
 //$collapsed = $collapsed->sortBy("recordID");
 $records = $collapsed->all();

$ targetItem - это модель, имеющая отношение hasMany к каждой книге, журналу и статье.

Кажется, я успешно свернул коллекции, в результате чегов массиве объектов.Однако, когда я пытаюсь использовать функцию sortBy (закомментировано выше), она нацеливается на объекты, а не на ключи внутри объектов.

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

Заранее спасибо!

РЕДАКТИРОВАТЬ Вывод без строки sortBy

"data": [
    {
        "recordID": 1,
        ...
    },
    {
        "recordID": 2,
        ...
    },

Вывод сстрока sortBy

"data": {
    "0": {
        "recordID": 1,
        ...
    },
    "1": {
        "recordID": 2,
        ...
    },

Кажется, что каждый объект имеет индекс, поэтому я предполагаю, что он пытается сортировать там, а не по тому, что содержит объект?Еще раз спасибо за помощь.

1 Ответ

0 голосов
/ 26 июня 2018

Doh! Решил мой собственный вопрос с помощью простого исправления после многих часов попыток.

Мне не хватало только следующей строки:

$records = $collapsed->all();

должно было быть:

$records = $collapsed->values()->all();

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

...