ホームページ  >  記事  >  バックエンド開発  >  雄弁なトリック: サブクエリからの Laravel モデル

雄弁なトリック: サブクエリからの Laravel モデル

WBOY
WBOYオリジナル
2024-08-17 06:50:06487ブラウズ

Eloquent Trick: Laravel Model from Subquery

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。