web-dev-qa-db-ja.com

Eloquent \ Model :: get()とall()の違い

EloquentでのUser::all()User::get()の使用の違いは何ですか?

Laravel APIについてのみ説明します all() on _Eloquent\Model_。
たぶん get() は_Eloquent\Builder_で説明されています。

36
David Rodrigues

User::all()User::get()はまったく同じことを行います。

all()は_Eloquent\Model_の静的メソッドです。新しいクエリオブジェクトを作成し、get()を呼び出すだけです。 all()を使用すると、実行されたクエリをまったく変更できません(列を選択して、パラメータとして渡すことで選択できます)。

get()は、_Eloquent\Builder_オブジェクトのメソッドです。 where句の追加など、クエリを変更する必要がある場合は、get()を使用する必要があります。たとえば、User::where('name', 'David')->get();

64
patricus

これが機能する理由をさらに明確にするには、定義されていない静的呼び出しを取得し、インスタンスを作成して、インスタンスのメソッドを呼び出す、Modelクラスにマジックメソッドがあるためです。

ソースコードで確認できます: https://github.com/laravel/framework/blob/5.6/src/Illuminate/Database/Eloquent/Model.php (1580行目)

これは、このLaracastエピソードでも説明されています。 https://laracasts.com/series/advanced-eloquent/episodes/ (サブスクリプションが必要です)

私も最初にこれに出くわし、get()を静的メソッドとして見つけることができなかったとき、私も戸惑いました。しかし、その後、ドットをつなげるのに役立つLaracastエピソードを思い出しました。

4
Kenny