Eloquent ORM laravel 5IDの配列を取得します


84

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 )

回答:


208

あなたが使用することができます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();

注:たとえばブレード文字列 が必要な場合は、次のようにtoArray()部分なしで関数を使用できます。

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

3
pluck( 'id')配列はarray( '0' => 12、 '1' => 14)などであり、WhereIn( 'id'、$ array)で使用すると、idではなく配列で選択されます。キーなので、0,1までに...
Gediminas

2
toArray()次のような配列を返す必要があります[12,14]
Zakaria Acharki 2018

1
そうです、私はDebugbar ant print_rを介してデバッグしていましたが、どちらもキー付きの配列値を示していましたが、キーがありません。ありがとうございました!
ゲディミナス

1つのプロジェクトで4.2に固執しているので、-> ists( 'id')参照を保持していただきありがとうございます。これにより配列が直接生成されましたが、-> toArrayする必要はありませんでした。
ダスティングラハム

18

から、Collectionあなたがそれを行うことができる別の方法は次のようになります:

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

これによりwhereIn()、たとえばクエリでlaravelが完全に使用できるインデックス付き配列が返されます。


2
ドロップダウンリストにも使用されます。
ビラ

モデルからから摘むのコレクションを取得するには\YourModel::all(['id'])... ->pluck...(ちょうどID列を指定して、あなたがモデルにすべてのデータをロードしない)
jave.web

5

それに対する正解は方法ですlists、それはこのように非常に簡単です:

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

よろしく!


多対多の関係を通じて、関連するIDのリストを配列で取得するにはどうすればよいですか?
Pathros

たぶん、DBクラスを使用できます。例:DB :: table( 'name_of_table')-> where( 'condition')-> lists( 'id');
Radames E. Hernandez

5

all()メソッドの代わりにtoArray()メソッドを使用できます(詳細:laravelのドキュメントを参照):

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

が必要な場合はstringtoArray()添付なしで使用できます。

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

4

Lists()メソッドについて読む

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

ブレードファイルでin_array_commandを使用すると、このエラーが表示されます。> in_array()は、パラメーター2が配列であり、オブジェクトが指定されていることを想定しています
パラノイド

ああ今私はあなたを取得します、あなたはtoArray()、lists()を呼び出す必要がありますコレクションを返します
Amir Bar

0

使用している場合は、追加情報DB

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

また、Eloquentモデルを使用する場合:

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

0

あなたは答えをマークしましたが、これははるかに簡単なアプローチです

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

-2

all()メソッドを使用して、選択した属性の配列を取得することもできます。

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

よろしく


1
動作しません。未定義のメソッドIlluminate \ Database \ Query \ Builder :: all()の
呼び出し
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.