ホームページ >データベース >mysql チュートリアル >Laravel Eloquent ORM (バングラ語パートクエリスコープ)

Laravel Eloquent ORM (バングラ語パートクエリスコープ)

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2025-01-16 20:03:11866ブラウズ

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.複数のスコープ

複数のスコープをチェーンすることができます。 たとえば、status スコープと active スコープは一緒に使用できます。

<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 つのスコープと 1 つの orderBy チェーンがあります。

以上がLaravel Eloquent ORM (バングラ語パートクエリスコープ)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。