php Laravel口才:返回数组键作为字段ID

lxkprmvk  于 2022-12-25  发布在  PHP
关注(0)|答案(5)|浏览(130)

当我通过Laravel的Eloquent ORM执行查询时,我希望获得行ID作为Array结果键,这将使我基于ID检查某些内容(使用array_key_exists)或执行某些查找(如果我需要结果数组中的特定条目)时的工作变得更容易
有什么方法可以让Eloquent将键设置为字段ID吗?

f8rj6qna

f8rj6qna1#

你可以简单地

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

h22fl7wq2#

由于您有一个Eloquent Collection(generic Collection classchild 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文档。

eqfvzcg8

eqfvzcg83#

如果有一个Support\Collection/Database\Eloquent\Collection,可以使用lists('id')方法返回集合中每个模型的id数组。
然后使用array_combine将键Map到模型,其结果将是一个数组,其中idMap到相应的模型。

vwkv1x7d

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);
btqmn9zl

btqmn9zl5#

get()输出中的pluck('label','id')就是您在Laravel 5.8+中所寻找的,它提供了一个集合,可以进行toArray()编辑
例如:

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

我也遇到过类似的挑战-我希望PHP数组允许我创建一个,每个选项都有一个,的值是id自动递增列,显示的文本是值。

相关问题