EloquentでのUser::all()
とUser::get()
の使用の違いは何ですか?
Laravel APIについてのみ説明します all()
on _Eloquent\Model
_。
たぶん get()
は_Eloquent\Builder
_で説明されています。
User::all()
とUser::get()
はまったく同じことを行います。
all()
は_Eloquent\Model
_の静的メソッドです。新しいクエリオブジェクトを作成し、get()
を呼び出すだけです。 all()
を使用すると、実行されたクエリをまったく変更できません(列を選択して、パラメータとして渡すことで選択できます)。
get()
は、_Eloquent\Builder
_オブジェクトのメソッドです。 where句の追加など、クエリを変更する必要がある場合は、get()
を使用する必要があります。たとえば、User::where('name', 'David')->get();
。
これが機能する理由をさらに明確にするには、定義されていない静的呼び出しを取得し、インスタンスを作成して、インスタンスのメソッドを呼び出す、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エピソードを思い出しました。