お問合わせ開発ブログ株式会社Nextatのスタッフがお送りする技術コラムメインのブログ。ORMと2つのBuilderクラスこんにちは、ナカエです。->get();という優雅なコードの裏ではModelクラス以外にも2つのBuilderクラスが働いています。この委譲関係を把握することはEloquentの理解にとって非常に有意義です。LTSのコードを参照しています。\Illuminate\Database\Eloquent\Builderクラスフルネームが長いので以下Eloquentビルダーと呼称します。Eloquentビルダーのインスタンスの同名のメソッドが呼ばれます。}※Model::newQuery()では、Modelに定義したグローバルスコープがあらかじめ適用されます。明示的にEloquentビルダーを呼ぶことも可能です。Article::query()->find(1);は同じ結果になります。後者は記述が少し長くなりますがIDEで補完が利きやすいです。\Illuminate\Database\Query\Builderクラス例によって長いのでQueryビルダーと呼称します。Queryビルダーに委譲されます。EloquentビルダーはQueryビルダーのインスタンスを内部に保持しています。Eloquentビルダーはクエリの返り値をModelやModelのCollectionとして利用するためにQueryビルダーをラップしたクラスです。ScopeQueryビルダーの同名メソッドの優先順位で探索されます。__call()の返り値はメソッドチェーンを実現するためにEloquentビルダーそのものになる場合が多いです。一部のメソッドはQueryビルダーの返り値をそのまま返します。お問合わせプライバシーポリシ。