」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 雄辯技巧:來自子查詢的 Laravel 模型

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

發佈於2024-11-03
瀏覽:263

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();

結論

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

版本聲明 本文轉載於:https://dev.to/bedram-tamang/eloquent-trick-laravel-model-from-subquery-4im6?1如有侵犯,請聯絡[email protected]刪除
最新教學 更多>

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3