「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > 雄弁なトリック: サブクエリからの Laravel モデル

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

2024 年 11 月 3 日に公開
ブラウズ:457

Eloquent Trick: Laravel Model from Subquery

Laravel では、次のようなテーブル プロパティを使用してモデルに対応するテーブルを定義するのが一般的です。

クラス ユーザーがモデルを拡張 { protected $table = 'ユーザー'; }
class User extends Model {
  protected $table = 'users';
}
ただし、テーブルに直接マッピングする代わりに、サブクエリを使用できます。この手法を使用すると、データベース ビューを作成するのと同じように、複雑なクエリをアプリケーション層内にカプセル化できますが、Eloquent 操作の柔軟性も追加されています。

たとえば、管理者と通常のユーザーの両方に関する情報を保存するユーザー テーブルについて考えてみましょう。サブクエリ:

を使用して AdminUser モデルを作成できます。

クラスAdminUser { パブリック関数 getTable(): string|\Illuminate\Contracts\Database\Query\Expression { $sql = ユーザー::クエリ() ->select('id', 'name') ->where('admin_user', true) ->toRawSql(); return DB::raw(sprintf('(%s) as admin_users', $sql)); } }
class User extends Model {
  protected $table = 'users';
}
このモデルはサブクエリ (admin_user = 1 のユーザーから ID、名前を選択) からデータを取得し、標準モデルと同じようにクエリできるようにします。


AdminUser::query()->get();
class User extends Model {
  protected $table = 'users';
}
または


AdminUser::query()->first();
class User extends Model {
  protected $table = 'users';
}
ただし、find(1) などの特定のクエリは直接機能しないことに注意してください。


AdminUser::query()->find(1);
class User extends Model {
  protected $table = 'users';
}
これを回避するには、where 条件を first():

と組み合わせて使用​​できます。

AdminUser::query()->where('id', 1)->first();
class User extends Model {
  protected $table = 'users';
}
結論

提供された例は、モデル内でロジックを構造化する方法を簡単に示しています。ただし、このアプローチは、より複雑なシナリオに対応するように拡張および適応させることができます。このような構造を活用することで、複雑なロジックを効率的に管理および抽出でき、複雑さが増大してもモデルが組織化され、保守可能で、スケーラブルな状態を維持できるようになります。

リリースステートメント この記事は次の場所に転載されています: https://dev.to/bedram-tamang/eloquent-trick-laravel-model-from-subquery-4im6?1 侵害がある場合は、[email protected] に連絡して削除してください。
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3