Очень часто в Laravel нужно получить нестандартную структуру массива данных из БД (ORM Eloquent) для удобства их дальнейшей обработки или вывода в пользовательской части в определенном формате.
Один из таких примеров - это необходимость получить массив с ключами, пронумерованными по id элементов (например ключ - id товара, значение - наименование товара). Получить такой массив очень просто.
Пример:
//код можно разместить, к примеру, в любом контроллере //в функцию keyBy() вставляется значение ORM, //которое будет записано в ключи массива получаемых данных $products = Product::all('id','name')->keyBy('id');
В результате получим нужный нам массив со значениями ключей из id товаров
1 => App\Models\Prop { #attributes: [ "id" => 1 "name" => "Какой-то там товар" ] } 4 => App\Models\Prop { #attributes: [ "id" => 4 "name" => "Другой товар" ] }
Часто требуется получить простейший массив со списком ID наименований, которые в дальнейшем нужно включить или исключить из выборки в запросе.
К примеру, нужно удалить одним запросом список товаров, которые относятся к категориями со следующими id: 2,6,7,9 (товары только из неактивных категорий). Эти ID предварительно нужно получить другим запросом из таблицы категорий. Делается это просто:
//код можно разместить, к примеру, в любом контроллере //задаем простой массив значений $mass = [2,6,7,9]; //Удаляем товары у которых столбец cat_id имеет //значения из заданного массива $products = Product::select('id')->whereIn('cat_id', $mass)->delete();; //Если требуется обратная операция удаления товаров, //не имеющих значения из массива $products = Product::select('id')->whereNotIn('cat_id', $mass)->delete(); //выше массив $mass задавался вручную //чтобы получить аналогичный массив из бд $mass = Cat::select('id')->where('cat.is_active', '=', '0') ->pluck('products.id')->toArray();
Конечно описанную выше задачу можно решить гораздо проще и одним запросом. Здесь пример приведен для ознакомления с возможностями получения и обработки массивов в удобном виде.