雄辩的ORM laravel 5获取ID数组


84

我使用的是Eloquent ORM laravel 5.1,我想返回一个ID数组,其值大于0,我的模型称为test

我努力了 :

$test=test::select('id')->where('id' ,'>' ,0)->get()->toarray();

它返回:

Array ( [0] => Array ( [id] => 1 ) [1] => Array ( [id] => 2 ) )

但我希望结果是简单的数组,如:

Array ( 1,2 )

Answers:


208

您可以使用lists()

test::where('id' ,'>' ,0)->lists('id')->toArray();

注意:如果您以Studly Case格式定义模型更好,例如Test


您还可以使用get()

test::where('id' ,'>' ,0)->get('id');

更新:( 对于版本> = 5.2)

lists()方法在新版本中已弃用>= 5.2,现在您可以改用pluck()method了:

test::where('id' ,'>' ,0)->pluck('id')->toArray();

注意: 如果需要一个字符串(例如在blade中),则可以使用不带toArray()部分的函数,例如:

test::where('id' ,'>' ,0)->pluck('id');

3
带有pluck('id')的数组是array('0'=> 12,'1'=> 14)等,当在WhereIn('id',$ array)中使用时,它不是按id选择而是按array键,所以按0,1 ...
Gediminas

2
toArray()应该返回一个数组[12,14]
Zakaria Acharki '18

1
哦,是的,您是对的,我正在通过Debugbar ant print_r进行调试,它们都显示了带有键的数组值,但是没有键。谢谢!
Gediminas

我们在一个项目上停留在4.2,所以我非常感谢保留-> lists('id')引用。尽管那可以直接生成一个数组,但不需要-> toArray。
达斯汀·格雷厄姆

18

Collection,您可以执行的另一种方法是:

$collection->pluck('id')->toArray()

这将返回一个索引数组,whereIn()例如,laravel在查询中可以完美使用。


2
也用于下拉列表。
比拉

要从模型中提取集合\YourModel::all(['id'])... ->pluck...(只需指定ID列,您就不
会将

5

正确的答案是method lists,就像这样非常简单:

$test=test::select('id')->where('id' ,'>' ,0)->lists('id');

问候!


您将如何通过多对多关系获取数组中相关ID的列表?
Pathros

也许您可以使用数据库类,例如:DB :: table('name_of_table')-> where('condition')-> lists('id');
Radames E. Hernandez

5

您可以使用all()method代替toArray()method(请参阅更多:laravel文档):

test::where('id' ,'>' ,0)->pluck('id')->all(); //returns array

如果您需要一个string,则可以不带toArray()附件使用:

test::where('id' ,'>' ,0)->pluck('id'); //returns string

4

了解有关list()方法的信息

$test=test::select('id')->where('id' ,'>' ,0)->lists('id')->toArray()

当我在刀片文件中使用in_array_command时显示此错误。> in_array()期望参数2为数组,给定对象
偏执

哦,现在我明白了,您需要调用toArray(),lists()返回集合
Amir Bar


0

尽管已标记了答案,但这是一种更简单的方法

App\User::pluck('id')->toArray()

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.