雄辩的ORM laravel 5获取ID数组

Posted

技术标签:

【中文标题】雄辩的ORM laravel 5获取ID数组【英文标题】:Eloquent ORM laravel 5 Get Array of ids 【发布时间】:2016-03-22 08:41:10 【问题描述】:

我使用的是 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 )

【问题讨论】:

【参考方案1】:

了解 list() 方法

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

【讨论】:

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

你可以使用 lists()

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

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


您也可以使用 get()

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

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

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

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

注意: 如果您需要 string,例如在 blade 中,您可以使用没有 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 它。【参考方案3】:

正确答案是lists方法,很简单:

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

问候!

【讨论】:

如何通过多对多关系获取数组中相关id的列表?? 也许你可以使用DB类,例如:DB::table('name_of_table')->where('condition')->lists('id');【参考方案4】:

来自Collection,另一种方法是:

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

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

【讨论】:

也用于下拉列表。 要从模型\YourModel::all(['id']) ... ->pluck... 中提取集合(仅指定 ID 列,您不会将所有数据加载到模型)【参考方案5】:

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

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

如果需要string,可以不带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();

【讨论】:

【参考方案7】:

虽然你已经标记了答案,但这是一个更简单的方法

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

【讨论】:

【参考方案8】:

从集合中获取具有模型 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();

以上是关于雄辩的ORM laravel 5获取ID数组的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 5.2 中雄辩的 ORM 同表关系

Laravel 雄辩的 ORM 关系

雄辩的 orm - 放置一个数组

Laravel 5 雄辩的基于连接的字段最大值

Laravel 雄辩的一对一通过(级别/树)关系

Laravel 雄辩的 ORM 群在哪里