当我通过Laravel的Eloquent ORM执行查询时,我想将行ID作为数组结果键,当我想根据ID检查某些内容时(使用array_key_exists)或做一些查找(如果我需要结果数组中的特定条目)
有什么方法可以告诉Eloquent将密钥设置为字段ID? see image http://oi60.tinypic.com/kc02a8.jpg
答案 0 :(得分:95)
你可以简单地做
/\d+$/
干杯:)
答案 1 :(得分:32)
由于你有一个Eloquent Collection(child class的generic Collection
class),你可以使用getDictionary
method。 $collection->getDictionary()
将为您提供由主键键入的Category对象数组。
如果您想要另一个Collection而不是本机PHP数组,则可以使用$collection->keyBy($property)
。看起来您的主键是category_id
,因此$collection->keyBy('category_id')
。您可以使用该方法来键入任意属性,包括您可能编写的任何get mutators。
虽然getDictionary
对于Eloquent Collection
扩展程序是唯一的,但keyBy
可供所有Laravel Collection
对象使用。请参阅Laravel 4.2 API docs或Laravel 5.0 API docs。
答案 2 :(得分:4)
您有一个Support\Collection
/ Database\Eloquent\Collection
,您可以使用方法lists('id')
返回集合中每个模型的ID数组。
然后使用array_combine
将键映射到模型。其结果将是一个数组,其id映射到其对应的模型。
答案 3 :(得分:2)
如果你需要id作为密钥,那么依赖于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);
答案 4 :(得分:0)
pluck('label','id')
是您在Laravel 5.8+中寻找的结果,它为您提供了一个可以toArray()
编辑的集合
例如:
$options = \App\DataChoice::where([ 'field_id' => $dataField->id , 'active' => true ])->get()->pluck('label','id')->toArray();
我遇到了类似的挑战-我想要一个PHP数组,以允许我为每个选择创建一个,其中的值是id自动增量列,而显示的文本是值。