Laravel 5的Eloquent ORM如何获取id数组?

112

我正在使用 Laravel 5.1 的 Eloquent ORM,并且想要返回一个大于0的ID数组,我的模型名为test

我尝试过:

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

它返回:

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

但是我希望结果以简单的数组形式呈现,就像这样:

Array ( 1,2 )
9个回答

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

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

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

更新:适用于版本小于5.2

您可以使用lists()

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

注意:最好使用Studly Case格式定义您的模型,例如:Test


您也可以使用get()方法:

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


3
使用pluck('id')方法得到的数组是array('0'=>12, '1'=>14)等形式,当在WhereIn('id', $array)中使用时,它选取的不是id,而是数组键(即0、1等)。 - Gediminas Šukys
3
toArray() 应该返回一个类似于 [12,14] 的数组。 - Zakaria Acharki
1
哦,是的,你说得对,我通过Debugbar和print_r进行调试,它们都显示了带有键的数组值,但实际上并没有键。谢谢! - Gediminas Šukys
我们在一个项目上卡在了4.2版本,所以我很感激保留->lists('id')的引用。虽然它直接生成了一个数组,但不需要使用->toArray。 - Dustin Graham

34

从一个Collection中,另一种方法是:

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

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


2
也可用于下拉列表。 - Bira
从模型\YourModel::all(['id'])中获取要提取的集合... ->pluck...(仅指定ID列,您不需要将所有数据加载到模型中)。 - jave.web

7

正确的答案是使用方法 lists,它就像这样非常简单:

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

Regards!


你如何通过多对多关系获取相关id列表的数组? - Pathros
也许你可以使用 DB 类,例如:DB::table('name_of_table')->where('condition')->lists('id'); - Radames E. Hernandez

6

2
关于 Laravel 8:... ->get()->modelKeys() - Pathros
->get('id')->modelKeys();
  • 不需要,已经足够了 ->->get()->model Keys();
  • 不需要,已经足够了
- Heretic Sic

6

您可以使用all()方法代替toArray()方法(更多信息请参见:Laravel文档):

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

如果你需要一个字符串,你可以直接使用而不需要toArray()附加:
test::where('id' ,'>' ,0)->pluck('id'); //returns string

6

额外提供一些信息,如果您正在使用DB

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

如果使用Eloquent模型:

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

5

阅读lists()方法的介绍

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

当我在 Blade 文件中使用 in_array 命令时,会显示此错误。>in_array() 函数期望第二个参数为数组,但是传递了对象。 - paranoid
哦,现在我明白了,你需要调用toArray(),lists()返回集合。 - Amir Bar

2
尽管您已经标记了答案,但这是一个更简单的方法。
App\User::pluck('id')->toArray()

1
在 Laravel 8 中,这对我有效。
$arr = SomeModel::where("field", value)->get()->toArray();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接