LaravelのHasManyのGlobalScope(グローバルスコープ)を外す。

LaravelのHasManyのGlobalScope(グローバルスコープ)を外す。

モデルの基本的なwhere条件など(削除フラグetc)をboot()メソッドで addGlobalScopeで追加できるまではよかったが、hasManyで引っ張る時に removeGlobalScopeなんて関数がなく困った。

以下のようにhasManyを別々にして対応。もう少しスマートにできないかな。

<?php
class User extends Model
{
    
    protected static function boot()
    {
        parent::boot();
        static::addGlobalScope('スコープ名', function(Builder $builder) {
            $builder->where('delete_flg', 0);
        });
    }
    
    public function post(){
        return $this->hasMany(
            "App\Post",
            'id',
            'user_id'
        );
    }
    
    public function postAll(){
        return $this->hasMany(
            "App\Post",
            'id',
            'user_id'
        )->withoutGlobalScope('スコープ名');
    }
}

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です