Eloquent 只获取一列作为数组
Posted
技术标签:
【中文标题】Eloquent 只获取一列作为数组【英文标题】:Eloquent get only one column as an array 【发布时间】:2016-04-27 00:29:19 【问题描述】:如何使用 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
【问题讨论】:
【参考方案1】:您可以使用pluck
方法:
Word_relation::where('word_one', $word_id)->pluck('word_two')->toArray();
有关可用于收集的方法的更多信息,您可以查看Laravel Documentation。
【讨论】:
谢谢,那是我在某处看到的函数,但再也找不到了,也为了记录,为了答案是准确的,然后可能添加 ->toArray() 因为它返回集合至少可以从 laravel 5.2 的查询中忽略 moment 和 select。 确实select
是多余的,但我认为有一个集合没有问题,因为集合只是一个 fancy 数组,它可以像数组一样迭代。我很少使用数组而不是集合,因为内存占用通常不是问题,并且集合可以在需要的地方轻松转换为数组,因为它们实现了toArray
方法。但是,为了与您的问题保持一致,我修改了答案以转换结果。
目前我对 laravel 和 eloquent 还很陌生,所以我需要这些作为数字数组,以便稍后将数组与类似的数组合并并在另一个查询中使用它
感谢您分享这个!
虽然Collection
也有pluck()
方法 - 您使用的是QueryBuilder
的方法。【参考方案2】:
如果您收到多个条目,则正确的方法称为lists。
Word_relation::select('word_two')->where('word_one', $word_id)->lists('word_one')->toArray();
【讨论】:
太棒了!lists()
自己可以正常工作。谢谢。
轰隆隆!这完美地工作。但是不需要使用 toArray() 函数,因为 lists() 返回一个数组。
lists()
在 Laravel Ver.5.2 及更高版本中已弃用,其中pluck()
标记答案中的方式是这样。【参考方案3】:
我认为你可以使用下面的代码来实现它
Model::get(['ColumnName'])->toArray();
【讨论】:
你能解释一下吗? 据我所知,Model::get(['ColumnName'])->toArray();
等同于Model::select('ColumnName')->get()->toArray()
,这会产生一个多维数组。【参考方案4】:
我遇到了这个问题,并想我会澄清一个 eloquent builder 对象的 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');
【讨论】:
【参考方案5】:这可以简而言之:
Model::pluck('column')
其中模型是模型,例如 User
模型和列作为列名,例如 id
如果你这样做了
User::pluck('id') // [1,2,3, ...]
& 当然你可以在 pluck 之前添加任何其他子句,例如 where
子句
【讨论】:
以上是关于Eloquent 只获取一列作为数组的主要内容,如果未能解决你的问题,请参考以下文章
仅当一个字段作为数组提供时,Laravel Eloquent 才插入多条记录