Очень часто в 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();
Конечно описанную выше задачу можно решить гораздо проще и одним запросом. Здесь пример приведен для ознакомления с возможностями получения и обработки массивов в удобном виде.