За последние 24 часа нас посетили 22825 программистов и 1238 роботов. Сейчас ищет 821 программист ...

Список класса Items в той последовательности что в коллекции $collection

Тема в разделе "Laravel", создана пользователем RsbAstana, 1 апр 2021.

  1. RsbAstana

    RsbAstana Новичок

    С нами с:
    1 апр 2021
    Сообщения:
    11
    Симпатии:
    2
    Добрый день!

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

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

    $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?
     
  2. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.824
    Симпатии:
    738
    Адрес:
    Татарстан
    если верно тебя понял - как то так https://qna.habr.com/q/341349

    верно поставленный вопрос, это сейчас уже не 50% решения, а все 99%
     
  3. RsbAstana

    RsbAstana Новичок

    С нами с:
    1 апр 2021
    Сообщения:
    11
    Симпатии:
    2
    Спасибо большое! То что нужно! :)

    Код (Text):
    1.                 $ids = $collection->keys()->toArray();
    2.                 $results = Item::whereIn('id', $ids)
    3.                 ->orderBy(\DB::raw("FIELD(id, " . implode(',', $ids ) . ")"))
    4.                     ->get();