Подтвердить что ты не робот

Laravel Eloquent: возвращает массив Array в качестве идентификатора полей

Когда я выполняю запрос с помощью Laravel Eloquent ORM, я хочу получить идентификатор строки в качестве ключа результата Array, это облегчит задачу, когда я захочу проверить что-либо на основе идентификатора (используя array_key_exists) или сделать некоторые поиски (если я нужна конкретная запись из массива результатов)

Можно ли как-то сказать Eloquent установить ключ для идентификатора поля? see image

4b9b3361

Ответ 1

Вы можете просто сделать

Model::all()->keyBy('category_id');

Ура :)

Ответ 2

Поскольку у вас есть Eloquent Collection (дочерний класс класса общий Collection), вы может использовать метод getDictionary. $collection->getDictionary() предоставит вам массив объектов категории, связанных их первичными ключами.

Если вам нужна другая коллекция, а не собственный PHP-массив, вместо этого вы можете использовать $collection->keyBy($property). Похоже, ваш первичный ключ category_id, поэтому $collection->keyBy('category_id'). Вы можете использовать этот метод для ключа любым произвольным свойством, включая любые мутаторы get, которые вы, возможно, написали.

Хотя getDictionary уникален для расширения Eloquent Collection, keyBy доступен для всех объектов Laravel Collection. См. Laravel 4.2 API docs или Документы API Laravel 5.0.

Ответ 3

У вас есть Support\Collection/Database\Eloquent\Collection, вы можете использовать метод lists('id'), чтобы вернуть массив идентификатора каждой из моделей в коллекции.

Затем используйте array_combine для сопоставления клавиш с моделями. Результатом этого будет массив с идентификатором, сопоставленным с соответствующей моделью.

Ответ 4

Если вам нужен идентификатор в качестве ключа, то полагайтесь на Collection:

$collection = Model::all();

$collection->getDictionary();

// returns:
array(
  1 => object(Model) ( ... ),
  2 => object(Model) ( ... ),
  ...
  idN => object(Model) ( ... )
);

В противном случае, хорошо или нет, вы можете сделать это:

$keys = $collection->lists('columnName');

$arrayOfModels = array_combine($keys, $collection->getDictionary);

Ответ 5

pluck('label','id') на выходе get() - это то, что вы ищете в Laravel 5. 8+, который дает вам коллекцию, готовую к toArray() ed

например:

$options = \App\DataChoice::where([ 'field_id' => $dataField->id , 'active' => true ])->get()->pluck('label','id')->toArray();

У меня была похожая проблема - я хотел создать массив PHP, который позволял бы мне создавать a с каждым для выбора, со значением, являющимся столбцом автоинкремента id, и отображаемым текстом, являющимся значением.