Laravel 当通过主键显式请求一个模型时,如何禁用全局作用域

Laravel 当通过主键显式请求一个模型时,如何禁用全局作用域,laravel,laravel-5,laravel-eloquent,Laravel,Laravel 5,Laravel Eloquent,在我的交易模型中,我有一个名为“放弃”的全局作用域,它可以帮助隐藏没有足够用户输入的交易 问题是,交易在创建时自动处于放弃状态,用户仍然需要能够与其交互,包括调用包含交易的各种API URL,例如 Route::post('deals/{deal}/notes', 'DealController@add_note'); 我希望能够使用magic route key lookup,以便控制器方法可以像这样工作: public function add_note(Request $request,

在我的交易模型中,我有一个名为“放弃”的全局作用域,它可以帮助隐藏没有足够用户输入的交易

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

Route::post('deals/{deal}/notes', 'DealController@add_note');
我希望能够使用magic route key lookup,以便控制器方法可以像这样工作:

public function add_note(Request $request, Deal $deal)
但是如果我这样写控制器,你不能给任何被放弃的交易添加注释。(你得到一个404)

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

public function add_note(Request $request, $deal_id){
  $deal = Deal::withAbandoned()->find($deal_id);
这感觉像是期望不匹配——该应用程序希望隐藏隐藏在所有列表和报告中的废弃交易,但如果你“按名称”(主键)知道某笔交易,那么你可以继续执行该交易。

答案对我适用。我使用在模型中设置全局范围

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对我来说

答案对我来说很有用。我使用在模型中设置全局范围

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