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

WBOY
リリース: 2024-08-17 06:50:06
オリジナル
498 人が閲覧しました

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

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート