ChatGPT解决这个技术问题 Extra ChatGPT

雄辩的ORM laravel 5获取ID数组

我正在使用 Eloquent ORM laravel 5.1,我想返回一个大于 0 的 id 数组,我的模型称为 test

我努力了 :

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

它返回:

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

但我希望结果是这样的简单数组:

Array ( 1,2 )

Z
Zakaria Acharki

您可以使用 lists()

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

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

您也可以使用 get()

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

更新:(对于 >= 5.2 的版本,请改用“pluck()”)

lists() 方法已在新版本 >= 5.2弃用,现在您可以使用 pluck()方法代替:

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

注意:如果您需要一个字符串,例如在刀片中,您可以使用没有 toArray() 部分的函数,例如:

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

使用 pluck('id') 数组是 array('0'=>12, '1'=>14) 等,当在 WhereIn('id', $array) 中使用时,它不是按 id 选择,而是按数组关键,所以 0,1...
toArray() 应该返回一个类似 [12,14] 的数组
哦,是的,你是对的,我是通过 Debugbar ant print_r 调试的,它们都显示了带有键的数组值,但是没有键。谢谢!
对于一个项目,我们坚持使用 4.2,所以我很欣赏保留 ->lists('id') 参考。虽然直接生成了一个数组,但不需要 ->toArray 。
G
George

Collection,您可以这样做的另一种方法是:

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

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


也用于下拉列表。
要从模型 \YourModel::all(['id']) ... ->pluck... 中获取集合(仅指定 ID 列,您不会将所有数据加载到模型)
R
Radames E. Hernandez

正确答案是方法lists,非常简单,如下所示:

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

问候!


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

您可以使用 all() 方法代替 toArray() 方法(查看更多:laravel documentation):

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

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

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

M
Mahmoud Abdelsattar

只是一个额外的信息,如果您使用 DB

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

如果使用 Eloquent 模型:

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

A
Amir Bar

阅读有关 lists() 方法的信息

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

当我在刀片文件中使用 in_array_command 时显示此错误。 >in_array() 期望参数 2 是数组,给定对象
哦,现在我明白了,你需要调用 toArray(), lists() 返回集合
O
Orici

从集合中获取具有模型 ID 的数组的简单方法:

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

自 Laravel 5.5 起可用: https://laravel.com/api/5.5/Illuminate/Database/Eloquent/Collection.html#method_modelKeys


至于 Laravel 8:... ->get()->modelKeys()
->get('id')->modelKeys(); - 不用了,够了 ->->get()->model Keys();
a
aslamdoctor

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

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

E
EduAvila

在 Laravel 8 这对我有用

$arr = SomeModel::where("field", value)->get()->toArray();