首頁  >  文章  >  後端開發  >  雄辯技巧:來自子查詢的 Laravel 模型

雄辯技巧:來自子查詢的 Laravel 模型

WBOY
WBOY原創
2024-08-17 06:50:06491瀏覽

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、name),讓您像標準模型一樣查詢它:

AdminUser::query()->get();


AdminUser::query()->first();

但是,請注意某些查詢,例如 find(1),無法直接執行:

AdminUser::query()->find(1);

要解決此問題,您可以將 where 條件與 first() 結合使用:

AdminUser::query()->where('id', 1)->first();

結論

提供的範例簡單說明了我們如何在模型中建立邏輯。然而,這種方法可以擴展和調整以適應更複雜的場景。透過利用這樣的結構,我們可以有效地管理和提取複雜的邏輯,確保我們的模型隨著複雜性的成長而保持組織性、可維護性和可擴展性。

以上是雄辯技巧:來自子查詢的 Laravel 模型的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn