LoginSignup
0
0

More than 3 years have passed since last update.

Eloquentのall()ってなんなの? いきなりget()しちゃダメなの?

Posted at

はじめに

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() を使う感じかな?
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0