テーブルのID全てを一次元配列の形で取得する
例としてここではusers
テーブルのすべてのレコードのIDを一次元配列の形で取得します
pluck()
を使用した例(ver.が5.2以降)
pluckメソッドは指定したキーの全コレクション値を取得します。
pluck()
でキーの全コレクションを取得したのちにtoArray()
メソッドで配列にしてやると取得できます。
ということで以下のように記述
App\User::all()->pluck('id')->toArray();
以下tinker(laravel用REPL)で実行した際の様子
$ php artisan tinker
Psy Shell v0.9.9 (PHP 7.3.4-1+ubuntu18.04.1+deb.sury.org+3 — cli) by Justin Hileman
>>> App\User::all()->pluck('id')->toArray()
=> [
1,
2,
3,
4,
5,
6,
]
>>>
lists()
を使用した例(ver.が5.2以前)
もしLaravel5.2以前を使用している場合はlists
メソッドが使えるようです
App\User::where('id' ,'>' ,0)->lists('id')->toArray();
※手元に環境がないので動作は未確認
lists
メソッドについて詳しくは以下を参照
- Return collection from the query builder · Issue #10478 · laravel/framework
- Laravel Collectionのpluckとlistsについてまとめ(5.2以降はpluck) - ハマログ
【おまけ】バリデーションでテーブルにあるデータなのかをチェックする場合
例えば都道府県マスタ(prefectures
テーブル)にあるIDか否かをチェックする場合は以下のように記述すればいけるはず。
以下はUserRequest
クラスにバリデーションルールを記述する際の例
UserRequest.php
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
// ...
'prefecture_id' => ['required', 'integer', Rule::in(Prefecture::all()->pluck('id')->toArray())],
];
}