在 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、name),讓您像標準模型一樣查詢它:
AdminUser::query()->get();
或
AdminUser::query()->first();
但是,請注意某些查詢(例如 find(1))無法直接運作:
AdminUser::query()->find(1);
要解決此問題,您可以將 where 條件與 first() 結合使用:
AdminUser::query()->where('id', 1)->first();
提供的範例簡單說明了我們如何在模型中建立邏輯。然而,這種方法可以擴展和調整以適應更複雜的場景。透過利用此類結構,我們可以有效地管理和提取複雜的邏輯,確保我們的模型隨著複雜性的成長而保持組織性、可維護性和可擴展性。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3