当我通过Laravel的Eloquent ORM执行查询时,我希望获得行ID作为Array结果键,这将使我基于ID检查某些内容(使用array_key_exists)或执行某些查找(如果我需要结果数组中的特定条目)时的工作变得更容易有什么方法可以让Eloquent将键设置为字段ID吗?
f8rj6qna1#
你可以简单地
Model::all()->keyBy('category_id');
h22fl7wq2#
由于您有一个Eloquent Collection(generic Collection class的child class),因此可以使用getDictionary方法。$collection->getDictionary()将为您提供一个Category对象数组,这些对象由它们的主键键控。如果你想要另一个Collection而不是原生的PHP数组,你可以使用$collection->keyBy($property) .看起来你的主键是category_id,所以$collection->keyBy('category_id') .你可以使用这个方法来键控任何属性,包括你可能已经编写的任何get mutator.虽然getDictionary是Eloquent Collection扩展所独有的,但keyBy可用于所有Laravel Collection对象。请参阅Laravel 4.2 API文档或Laravel 5.0 API文档。
Collection
getDictionary
$collection->getDictionary()
$collection->keyBy($property)
category_id
$collection->keyBy('category_id')
keyBy
eqfvzcg83#
如果有一个Support\Collection/Database\Eloquent\Collection,可以使用lists('id')方法返回集合中每个模型的id数组。然后使用array_combine将键Map到模型,其结果将是一个数组,其中idMap到相应的模型。
Support\Collection
Database\Eloquent\Collection
lists('id')
array_combine
vwkv1x7d4#
如果您需要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);
btqmn9zl5#
get()输出中的pluck('label','id')就是您在Laravel 5.8+中所寻找的,它提供了一个集合,可以进行toArray()编辑例如:
pluck('label','id')
toArray()
$options = \App\DataChoice::where([ 'field_id' => $dataField->id , 'active' => true ])->get()->pluck('label','id')->toArray();
我也遇到过类似的挑战-我希望PHP数组允许我创建一个,每个选项都有一个,的值是id自动递增列,显示的文本是值。
5条答案
按热度按时间f8rj6qna1#
你可以简单地
h22fl7wq2#
由于您有一个Eloquent Collection(generic
Collection
class的child class),因此可以使用getDictionary
方法。$collection->getDictionary()
将为您提供一个Category对象数组,这些对象由它们的主键键控。如果你想要另一个Collection而不是原生的PHP数组,你可以使用
$collection->keyBy($property)
.看起来你的主键是category_id
,所以$collection->keyBy('category_id')
.你可以使用这个方法来键控任何属性,包括你可能已经编写的任何get mutator.虽然
getDictionary
是EloquentCollection
扩展所独有的,但keyBy
可用于所有LaravelCollection
对象。请参阅Laravel 4.2 API文档或Laravel 5.0 API文档。eqfvzcg83#
如果有一个
Support\Collection
/Database\Eloquent\Collection
,可以使用lists('id')
方法返回集合中每个模型的id数组。然后使用
array_combine
将键Map到模型,其结果将是一个数组,其中idMap到相应的模型。vwkv1x7d4#
如果您需要id作为密钥,则依赖Collection:
否则,不管好不好,你都可以这样做:
btqmn9zl5#
get()输出中的
pluck('label','id')
就是您在Laravel 5.8+中所寻找的,它提供了一个集合,可以进行toArray()
编辑例如:
我也遇到过类似的挑战-我希望PHP数组允许我创建一个,每个选项都有一个,的值是id自动递增列,显示的文本是值。