首頁 > 資料庫 > mysql教程 > Bangla 部分查詢範圍中的 Laravel Eloquent ORM)

Bangla 部分查詢範圍中的 Laravel Eloquent ORM)

Mary-Kate Olsen
發布: 2025-01-16 20:03:11
原創
866 人瀏覽過

Laravel Eloquent ORM in Bangla Part-Query Scopes)

Laravel Eloquent 的 查詢範圍 功能允許將遞歸查詢儲存在方法中以使程式碼可重複使用。這使程式碼保持良好且易於理解,尤其是在一次又一次需要相同類型的查詢時。 查詢範圍將常見查詢定義為方法,然後可以在整個模型中使用它們。

1。全域範圍

說明:

全域範圍 總是附加到模型。 當您使用模型時,此範圍會自動工作,您不必每次都編寫它。 通常用於檢查登入狀態、活躍記錄等

建立全域範圍:

1. 建立全域範圍類別:

要在 Laravel 中建立 全域範圍,需要使用一個實作 Scope 介面的類別。

<code class="language-php">use Illuminate\Database\Eloquent\Scope;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Builder;

class ActiveScope implements Scope
{
    public function apply(Builder $builder, Model $model)
    {
        $builder->where('active', 1);  // সক্রিয়  ফিল্টার
    }
}</code>
登入後複製
登入後複製
登入後複製

2. 將全域範圍附加到模型:

這應該要加到模型的 booted() 方法中。

<code class="language-php">use App\Models\Post;
use App\Scopes\ActiveScope;

class Post extends Model
{
    protected static function booted()
    {
        static::addGlobalScope(new ActiveScope);
    }
}</code>
登入後複製
登入後複製
登入後複製

現在使用 Post::all() 將自動套用 active = 1 濾鏡。

3. 暫時省略全域範圍:

<code class="language-php">use Illuminate\Database\Eloquent\Scope;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Builder;

class ActiveScope implements Scope
{
    public function apply(Builder $builder, Model $model)
    {
        $builder->where('active', 1);  // সক্রিয়  ফিল্টার
    }
}</code>
登入後複製
登入後複製
登入後複製

這將暫時刪除全域範圍並傳回 active 篩選器之外的所有貼文。

2。本地範圍

說明:

本地範圍 充當模型內的特定查詢範圍,僅在您明確呼叫它時才適用。 它不會像全域範圍那樣在每個查詢期間自動套用。

建立本地範圍:

透過在模型中新增公共方法來建立本地作用域,其第一個參數 Builder 是輸入。

<code class="language-php">use App\Models\Post;
use App\Scopes\ActiveScope;

class Post extends Model
{
    protected static function booted()
    {
        static::addGlobalScope(new ActiveScope);
    }
}</code>
登入後複製
登入後複製
登入後複製

使用本地範圍:

<code class="language-php">$posts = Post::withoutGlobalScope(ActiveScope::class)->get();</code>
登入後複製

將參數加到本地範圍:

參數可以傳遞到本地作用域。

<code class="language-php">use App\Models\Post;

class Post extends Model
{
    // লোকাল  স্কোপ
    public function scopeActive($query)
    {
        return $query->where('active', 1);
    }

    public function scopeDraft($query)
    {
        return $query->where('status', 'draft');
    }
}</code>
登入後複製

範圍現在可以與 status 參數一起使用:

<code class="language-php">// সক্রিয়  পোস্ট  পেতে:
$posts = Post::active()->get();

// ড্রাফট  পোস্ট  পেতে:
$draftPosts = Post::draft()->get();

// চেইন  করে  ব্যবহার:
$activeDraftPosts = Post::active()->draft()->get();</code>
登入後複製

'published' 是參數。

3。動態範圍

動態作用域是一種本地作用域,可以動態呼叫作用域名稱。 Laravel 允許使用 scopeName() 類型名稱。

<code class="language-php">class Post extends Model
{
    // লোকাল  স্কোপ
    public function scopeStatus($query, $status)
    {
        return $query->where('status', $status);
    }
}</code>
登入後複製

範圍現在可以動態呼叫:

<code class="language-php">$posts = Post::status('published')->get();</code>
登入後複製

這就像 scopePublished() 方法一樣。

4。多重範圍

可以連結多個作用域。 例如,statusactive 範圍可以一起使用:

<code class="language-php">use Illuminate\Database\Eloquent\Scope;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Builder;

class ActiveScope implements Scope
{
    public function apply(Builder $builder, Model $model)
    {
        $builder->where('active', 1);  // সক্রিয়  ফিল্টার
    }
}</code>
登入後複製
登入後複製
登入後複製

這將同時適用於activestatus('published')

5。可連結範圍

Eloquent 的 本地作用域 是可連結的,這表示可以同時使用多個作用域。

<code class="language-php">use App\Models\Post;
use App\Scopes\ActiveScope;

class Post extends Model
{
    protected static function booted()
    {
        static::addGlobalScope(new ActiveScope);
    }
}</code>
登入後複製
登入後複製
登入後複製

共有 3 個作用域和一個 orderBy 鍊式作用域。

以上是Bangla 部分查詢範圍中的 Laravel Eloquent ORM)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板