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 才插入多条记录
Laravel groupBy 返回项目数组而不是使用日期作为键