Гость
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / PHP - Laravel Список класса Items в той последовательности что в коллекции $collection / 2 сообщений из 2, страница 1 из 1
01.04.2021, 08:42
    #40058756
RsbAstana
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PHP - Laravel Список класса Items в той последовательности что в коллекции $collection
Добрый день!

Не могу в интернете найти решение:

Есть коллекция:
Она заполняется в функции у меня

$links = Item::where()... с моими фильтрами
$links = Link::where()... с моими фильтрами

$collection = collect();

$str = "";
foreach ($items as $item) {
$str = "";
foreach ($links as $link) {
$item_find = GlobalController::view_info($item->id, $link->id);
$str = $str . trim($item_find['name']);
}
}
// В $collection сохраняется в key - $item->id
$collection[$item->id] = $str;
}

// Сортировка коллекции по значению
$collection = $collection->sort();

примерно так заполняется(для примера):
$collection = ['Fff', 'Aaa', 'Bbb', 'Zzz', 'Ggg'];
В качестве ключей коллекции - коды $item->id

Потом сортируется по наименованию:
$collection = $collection->sort();

$collection = ['Aaa', 'Bbb', 'Fff', 'Ggg', 'Zzz'];

И мне нужно получить список всех Items с такими кодами и в такой же последовательности как в коллекции.

(Сортировать типа в Item::all()->orderBy - этот вариант мне не подходит, результат есть в коллекции)

Вот команда:
$results = Item::whereIn('id',$collection->keys())->get();

Она работает, но мне нужно список Items в той последовательности что в коллекции $collection,
т.е. в алфавитном порядке,
а она возвращает в том порядке, в котором сохранены в таблице базы данных.

Как это сделать? Список Items в той последовательности что в коллекции $collection?
...
Рейтинг: 0 / 0
01.04.2021, 23:21
    #40058974
MikkiMouse
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PHP - Laravel Список класса Items в той последовательности что в коллекции $collection
RsbAstana,

Судя по твоим путаным объяснениям, хочешь ты чего-то такого:

Код: php
1.
2.
3.
4.
5.
6.
7.
$ids = $collection->keys();

$idsJoinedForOrderBy = join(',', $ids);

$results = Item::whereIn('id', $ids)
    ->orderByRaw("FIELD(id, {$idsJoinedForOrderBy})")
    ->get();



Угадал?
...
Рейтинг: 0 / 0
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / PHP - Laravel Список класса Items в той последовательности что в коллекции $collection / 2 сообщений из 2, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]