はじめに
LaravelでDBからデータを取り出す処理を書いているときに、大体all()
ってやるじゃないですか。
$hoges = Hoge::all()
で、自分で書いておきながら「あれ? 全件取り出しの時all()
って書いたのなにげに初めてじゃね?」って思ったんですね。実際、他のところではいきなりget()
してました。
$fugas = Fuga::get();
で、この2つ、同じ動きをするわけなんですが、何が違うんじゃ? と思った次第です。
all()
のコードを見てみよう
公式ドキュメント見ても何がどう違うのか書いてはいなかったので、コードを見てみることにしました。
vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php(454-465)
/**
* Get all of the models from the database.
*
* @param array|mixed $columns
* @return \Illuminate\Database\Eloquent\Collection|static[]
*/
public static function all($columns = ['*'])
{
return static::query()->get(
is_array($columns) ? $columns : func_get_args()
);
}
どうも、普通にget()
を呼んでいるだけのようです。
ただ、違うところは取得するカラムを引数で指定できるようになっているのですが、配列、もしくは可変長で取れる様になっているところみたいです。
つまり、
$hoges = Hoge::all(['id', 'updated_at']);
$hoges = Hoge::all('id', 'updated_at');
は同じ動きをするってことですね。
get()
の場合は引数が1つの配列、もしくは文字列しか取れないので
動かない例
$hoges = Hoge::get('id', 'updated_at');
これは動きません。
結論
- いきなり
get()
でも良さそう - 全件取得してるよ!ってのを明示的にしたければ
all()
を使う感じかな?