如何通过主键明确要求一个模型时禁用全局范围

时间:2017-10-03 19:59:45

标签: laravel laravel-5 laravel-eloquent

我有一个名为Abandoned on my Deal模型的全局范围,有助于隐藏没有足够用户输入的交易,值得与之互动。

问题是,交易在创建时自动处于废弃状态,用户仍需要能够与其进行交互,包括调用包含交易的各种API网址,例如

Route::post('deals/{deal}/notes', 'DealController@add_note');

我希望能够使用魔术路由键查找,以便控制器方法可以像:

public function add_note(Request $request, Deal $deal)

但是,如果我像这样编写控制器,则无法为任何被放弃的交易添加注释。 (你得到404)

我发现的唯一解决方法是编写每个控制器,如:

public function add_note(Request $request, $deal_id){
  $deal = Deal::withAbandoned()->find($deal_id);

感觉就像是期望不匹配 - 应用程序想要隐藏所有列表和报告中隐藏的被放弃的交易,但如果您知道“按名称”(主键)的交易,那么您可以继续采取行动。

1 个答案:

答案 0 :(得分:0)

答案here对我有用。我用来在Model

中设置全局范围
use Illuminate\Database\Eloquent\Builder;
....
public static function boot() {
    static::addGlobalScope('order', function (Builder $builder) {
        $builder->orderBy('active', 'desc')->orderBy('name', 'asc')-
        >orderBy('surname', 'asc');
    });

}

而且,如果我需要排除它,我可以:

MyModel::withoutGlobalScope('order')->get();

由于它与list方法一起使用,或者填充select2,从未想过编辑/删除...似乎是一个有用的加法,为我+1;