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

问题描述 投票:0回答:1

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

问题是,Deal在创建时自动处于Abandoned状态,并且用户仍需要能够与其进行交互,包括调用包含Deal的各种API URL,例如,

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);

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

laravel laravel-5 laravel-eloquent
1个回答
0
投票

答案here适合我。我用它在模型中设置全局范围

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,从未想过编辑/删除...似乎是一个有用的adition,+1给我

© www.soinside.com 2019 - 2024. All rights reserved.