雄辩的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数组的主要内容,如果未能解决你的问题,请参考以下文章