如何使用 eloquent 在 laravel 5.2 中仅将一列作为一维数组?
我努力了:
$array = Word_relation::select('word_two')->where('word_one', $word_id)->get()->toArray();
但这一个将其作为二维数组提供,例如:
array(2) {
[0]=>
array(1) {
["word_one"]=>
int(2)
}
[1]=>
array(1) {
["word_one"]=>
int(3)
}
}
但我想得到它:
array(2) {
[0]=>2
[1]=>3
}
您可以使用 pluck
方法:
Word_relation::where('word_one', $word_id)->pluck('word_two')->toArray();
有关哪些方法可用于收集的更多信息,您可以查看 Laravel Documentation。
如果您收到多个条目,则正确的方法称为 lists。
Word_relation::select('word_two')->where('word_one', $word_id)->lists('word_one')->toArray();
lists()
自己工作正常。谢谢你。
lists()
在 Laravel Ver.5.2 及更高版本中已弃用,其中 pluck()
与标记答案中的方式相同。
简而言之,可以这样做:
Model::pluck('column')
其中 model 是模型,例如 User
model &列作为列名,如 id
如果你这样做
User::pluck('id') // [1,2,3, ...]
&当然,您可以在 pluck 之前使用任何其他子句,例如 where
子句
我遇到了这个问题,并想我会澄清一下,雄辩的构建器对象的 lists() 方法在 Laravel 5.2 中已被贬低,并被 pluck() 取代。
// <= Laravel 5.1
Word_relation::where('word_one', $word_id)->lists('word_one')->toArray();
// >= Laravel 5.2
Word_relation::where('word_one', $word_id)->pluck('word_one')->toArray();
例如,这些方法也可以在 Collection 上调用
// <= Laravel 5.1
$collection = Word_relation::where('word_one', $word_id)->get();
$array = $collection->lists('word_one');
// >= Laravel 5.2
$collection = Word_relation::where('word_one', $word_id)->get();
$array = $collection->pluck('word_one');
我认为您可以使用以下代码来实现它
Model::get(['ColumnName'])->toArray();
Model::get(['ColumnName'])->toArray();
相当于做 Model::select('ColumnName')->get()->toArray()
导致多维数组。
select
是多余的,但我不认为有一个集合有问题,因为集合只是一个 fancy 数组,可以像数组一样迭代.我很少使用数组而不是集合,因为内存占用通常不是问题,并且集合可以在需要的地方轻松转换为数组,因为它们实现了toArray
方法。但是,为了与您的问题保持一致,我修改了答案以转换结果。Collection
也有pluck()
方法 - 您使用的是QueryBuilder
的方法。