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

Posted

技术标签:

【中文标题】Laravel Eloquent:返回数组键作为字段 ID【英文标题】:Laravel Eloquent: Return Array key as the fields ID 【发布时间】:2015-01-08 01:26:21 【问题描述】:

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

有什么方法可以告诉 Eloquent 将键设置为字段 ID?

【问题讨论】:

我必须同意你必须自己做。或者,您可以在集合上使用 ->find($id) 通过 id 查找模型... 你有很多方法:laravel.com/api/4.2/Illuminate/Support/Collection.html & laravel.com/api/4.2/Illuminate/Database/Eloquent/… 所以你不需要这样做。 Eloquent 没有提供这样的功能。 【参考方案1】:

您有一个Support\Collection/Database\Eloquent\Collection,您可以使用lists('id') 方法返回集合中每个模型的ID 数组。

然后使用array_combine 将键映射到模型。其结果将是一个数组,其 id 映射到其相应的模型。

【讨论】:

【参考方案2】:

由于您拥有 Eloquent 集合(child class 的 generic Collection class),因此您可以使用 getDictionary method。 $collection->getDictionary() 将为您提供一个由其主键作为键的 Category 对象的数组。

如果您想要另一个 Collection 而不是原生 php 数组,您可以改用 $collection->keyBy($property)。看起来你的主键是category_id,所以$collection->keyBy('category_id')。您可以使用该方法对任意属性进行键控,包括您可能编写的任何 get 修改器。

getDictionary 是 Eloquent Collection 扩展所独有的,keyBy 可用于所有 Laravel Collection 对象。请参阅Laravel 4.2 API docs 或Laravel 5.0 API docs。

【讨论】:

【参考方案3】:

如果你需要id作为key,那么依赖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】:

你可以这样做

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

干杯:)

【讨论】:

如果你在做一个自定义查询,你可以像这样使用它:Model::selectRaw(...)->where(...)->groupBy('field')- >get()->keyBy('field')->toArray();【参考方案5】:

get() 输出上的pluck('label','id') 是您在 Laravel 5.8+ 中寻找的内容,它为您提供了一个集合,准备好成为toArray()ed

例如:

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

我遇到了类似的挑战 - 我想要一个 PHP 数组,以允许我为每个选择创建一个,其中 ' 的值是 id 自动递增列,显示的文本是值。

【讨论】:

以上是关于Laravel Eloquent:返回数组键作为字段 ID的主要内容,如果未能解决你的问题,请参考以下文章

Laravel Eloquent ID 作为数组键

Laravel 5.2 Eloquent 主键作为多键

仅当一个字段作为数组提供时,Laravel Eloquent 才插入多条记录

Laravel groupBy 返回项目数组而不是使用日期作为键

Laravel Eloquent - 如何将范围查询内的计算值作为模型列或集合属性返回

Laravel Eloquent hasOne 返回空