
Появилась такая задача: нужно получить массив из 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')
- в выборку коллекции получаем только поле idget()
- выполняем запрос получая все записи по указаным параметрам запроса.
В итоге в переменной $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);
// код ...
}
*** Авторизируйтесь чтобы писать комментарии.