Как получить массив из id моделей
Появилась такая задача: нужно получить массив из id последних 10 записей на сайте написанном на Winter CMS. Признаюсь что пришлось потратить какое то время для её решения.
Итак, чтобы получить последние 10 записей нам нужно выполнить такой запрос:
$items = Item::orderBy('id', 'desc')->limit(10)->select('id')->get();
Ничего сложного, но коротко поясню что происходит в этом запросе:
-
orderBy('id', 'desc')
- сортируем записи по полю id в убывающем порядке (99, 98, 97, ...) -
limit(10)
- берём 10 штук -
select('id')
- в выборку коллекции получаем только поле id -
get()
- выполняем запрос получая все записи по указаным параметрам запроса.
В итоге в переменной $items
у нас получается коллекция. Чтобы из коллекции получить массив можем воспользоваться методом toArray()
. Найти его можно в документации тут.
Можем коллекцию преобразовать в массив:
$arr_items = $items->toArray();
Но тут возникает проблема - массив получается многомерный. А мне нужен одномерный, я хочу проверить наличие элемента в этом массиве и если он есть - получить его индекс.
В хелперах WinterCMS есть метод array_flatten()
который из многомерного сделает плоский массив. Вот здесь в документации.
В итоге весь код по получению массива айдишников последних 10 записей выглядит так:
$items = Item::orderBy('id', 'desc')
->limit(10)
->select('id')
->get()
->toArray();
$arr_ids = array_flatten($items);
Метод toArray()
я прописал сразу в запросе. Так можно делать.
Теперь можно проверить наличие id текущего элемента ($current_id
) и если он есть, получить его индекс:
if ( in_array($current_id, $arr_ids) ) {
$index = array_search($current_id, $arr_ids);
// код ...
}
*** Войдите чтобы писать комментарии.