雄辩的ORM laravel 5获取ID数组

par*_*oid 65 php model laravel eloquent laravel-5

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

我试过了 :

$test=test::select('id')->where('id' ,'>' ,0)->get()->toarray();
Run Code Online (Sandbox Code Playgroud)

它返回:

Array ( [0] => Array ( [id] => 1 ) [1] => Array ( [id] => 2 ) )
Run Code Online (Sandbox Code Playgroud)

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

Array ( 1,2 )
Run Code Online (Sandbox Code Playgroud)

Zak*_*rki 159

你可以使用lists():

test::where('id' ,'>' ,0)->lists('id')->toArray();
Run Code Online (Sandbox Code Playgroud)

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


你也可以使用get():

test::where('id' ,'>' ,0)->get('id');
Run Code Online (Sandbox Code Playgroud)

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

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

test::where('id' ,'>' ,0)->pluck('id')->toArray();
Run Code Online (Sandbox Code Playgroud)

  • with pluck('id')数组是数组('0'=> 12,'1'=> 14)等,当在WhereIn('id',$ array)中使用时,它不是通过id选择,而是通过数组选择关键,所以0,1 ... (3认同)
  • `toArray()` 应该返回一个类似 `[12,14]` 的数组 (3认同)

Geo*_*rge 15

从一个集合,你可以做的另一种方式是:

$collection->pluck('id')->toArray()
Run Code Online (Sandbox Code Playgroud)

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

  • 也用于下拉列表。 (2认同)

Rad*_*dez 6

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

$test=test::select('id')->where('id' ,'>' ,0)->lists('id');
Run Code Online (Sandbox Code Playgroud)

问候!


Mah*_*afa 6

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

DB::table('test')->where('id', '>', 0)->pluck('id')->toArray();
Run Code Online (Sandbox Code Playgroud)

如果使用 Eloquent 模型:

test::where('id', '>', 0)->lists('id')->toArray();
Run Code Online (Sandbox Code Playgroud)


Ori*_*ici 6

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

$test = test::select('id')->where('id' ,'>' ,0)->get('id')->modelKeys();
Run Code Online (Sandbox Code Playgroud)

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

  • 至于 Laravel 8:`... ->get()->modelKeys()` (2认同)

Ami*_*Bar 5

了解 list() 方法

$test=test::select('id')->where('id' ,'>' ,0)->lists('id')->toArray()
Run Code Online (Sandbox Code Playgroud)


Meh*_*tün 5

您可以使用all()方法而不是toArray()方法(请参阅更多:laravel 文档):

test::where('id' ,'>' ,0)->pluck('id')->all(); //returns array
Run Code Online (Sandbox Code Playgroud)

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

test::where('id' ,'>' ,0)->pluck('id'); //returns string
Run Code Online (Sandbox Code Playgroud)