Laravel では、次のような table プロパティを使用してモデルに対応するテーブルを定義するのが一般的です。
class User extends Model { protected $table = 'users'; }
ただし、テーブルに直接マッピングする代わりに、サブクエリを使用することもできます。この手法を使用すると、データベース ビューを作成するのと同じように、アプリケーション層内で複雑なクエリをカプセル化できますが、Eloquent 操作の柔軟性も追加されています。
たとえば、管理者と通常のユーザーの両方に関する情報を保存するユーザー テーブルについて考えてみましょう。サブクエリを使用して AdminUser モデルを作成できます:
class AdminUser { public function getTable(): string|\Illuminate\Contracts\Database\Query\Expression { $sql = User::query() ->select('id', 'name') ->where('admin_user', true) ->toRawSql(); return DB::raw(sprintf('(%s) as admin_users', $sql)); } }
このモデルはサブクエリ (admin_user = 1 のユーザーから ID、名前を選択) からデータを取得するため、標準モデルと同じようにクエリを実行できます。
AdminUser::query()->get();
または
AdminUser::query()->first();
ただし、find(1) などの特定のクエリは直接機能しないことに注意してください。
AdminUser::query()->find(1);
これを回避するには、where 条件を first() と組み合わせて使用できます:
AdminUser::query()->where('id', 1)->first();
提供された例は、モデル内のロジックをどのように構築できるかを簡単に示しています。ただし、このアプローチは、より複雑なシナリオに対応するように拡張および適応させることができます。このような構造を活用することで、複雑なロジックを効率的に管理および抽出でき、モデルが複雑になっても組織化され、保守可能で、スケーラブルな状態を維持できるようになります。
以上が雄弁なトリック: サブクエリからの Laravel モデルの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。