グローバル スコープは Laravel の重要な概念であり、アプリケーション全体で Eloquent 条件を再利用できるようになります。グローバル スコープを実装すると、すべてのモデルにわたるクエリに特定の条件を適用でき、コードの再利用と一貫性が促進されます。対照的に、ローカル スコープは単一のモデルに限定されます。このチュートリアルでは、Laravel でのグローバル スコープの作成と利用に焦点を当てます。
<?php namespace app\Scopes; use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Scope; class ActiveScope implements Scope { public function apply(Builder $builder, Model $model) { // Define your global condition here $builder->where('is_active', '=', '1'); //or we can write $builder->whereIsActive('1'); } }
<?php namespace App; use App\Scopes\AgeScope; use Illuminate\Database\Eloquent\Model; use App\Scopes\ActiveScope; class User extends Model { /** * The "booting" method of the model. * * @return void */ protected static function boot() { parent::boot(); static::addGlobalScope(new ActiveScope); } }
モデルに ActiveScope を追加すると、User::all() は次の SQL を生成します。
select * from `users` where `is_active` = '1'
グローバル スコープを適用せずにすべてのデータをフェッチしたいシナリオが考えられます。 Laravel では、withoutGlobalScope メソッドを使用して、グローバル スコープをバイパスし、すべてのデータをフェッチできます。
User::withoutGlobalScope(ActiveScope::class)->get();
モデルに適用されている複数またはすべてのグローバル スコープを削除したい場合は、Laravel の withoutGlobalScopes メソッドを使用できます。この方法を使用すると、すべてのグローバル スコープをバイパスしたり、削除するグローバル スコープを指定したりできます。以下に例を示します:
// Remove all of the global scopes... User::withoutGlobalScopes()->get();
// Remove some of the global scopes... User::withoutGlobalScopes([ ActiveScope::class, AgeScope::class ])->get();
コンテンツが気に入って、さらに素晴らしい記事をサポートしたい場合は、私にコーヒーを買うことを検討してください。 ☕️?あなたのサポートは私にとって非常に重要であり、知識の流れを維持するのに役立ちます。ここでそれを行うことができます: ?コーヒー買ってきて
以上がLaravel のグローバル スコープ (StepWise)。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。