Как получить массив из 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);
    // код ...
}
input для ввода номера телефона в бэкенде
input для ввода номера телефона в бэкенде Как в бэкенде Winter CMS сделать поле с маской для ввода номера телефона с помощью javascript библиотеки Inputmask.
Обязательные поля в Winter CMS
Обязательные поля в Winter CMS Как в Winter CMS сделать поля модели обязательными для заполнения, чтобы система сама проверяла их заполненность перед сохранением экземпляра модели.
Русский язык для даты в Winter CMS
Русский язык для даты в Winter CMS Как в Winter CMS включить русский язык для выводимых на фронтенд дат. Если у вас в Winter CMS время и дата отображаются на английском языке, то значит что в настройках вы не меняли локализацию (язык) для фронтальной части сайта.
Комментарии 0

*** чтобы писать комментарии.