Laravel Eloquent:返回数组键作为字段ID

时间:2014-11-11 13:19:13

标签: php laravel eloquent

当我通过Laravel的Eloquent ORM执行查询时,我想将行ID作为数组结果键,当我想根据ID检查某些内容时(使用array_key_exists)或做一些查找(如果我需要结果数组中的特定条目)

有什么方法可以告诉Eloquent将密钥设置为字段ID? see image http://oi60.tinypic.com/kc02a8.jpg

5 个答案:

答案 0 :(得分:95)

你可以简单地做

/\d+$/

干杯:)

答案 1 :(得分:32)

由于你有一个Eloquent Collection(child classgeneric 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 docsLaravel 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自动增量列,而显示的文本是值。