想请问下全局范围查询的实现原理

浏览:136 发布日期:2020/09/11 分类:ThinkPHP6专区
场景:为了区别多商户的数据不互相污染,使用了merchant_id,来区分。
在编写代码的时候为了,效率和失误,在带有merchant_id字段的表中,对对应的模型都使用了merchant_id相关的全局范围查询。
这个方法大致的内容如下:public function scopeMerchantId($query){
    $query->where('merchant_id',$merchant_id);
    //判断商户是否已到期
    if(Merchant::isExpire($merchant_id)){
      throw new Exception('商户已到期')
    }
}
在某些特定场景下,业务不需要判断merchant_id,就需要动态关闭掉它,这个时候我调用如下代码    Order::withoutGlobalScope()->find();就发现了,以上的代码虽然sql语句确实没有出现【where('merchant_id',$merchant_id)】但是它其实还是会执行scope方法的,导致它会去执行查询//判断商户是否已到期这个逻辑,但是我使用withoutGlobalScope就是为了不让它去执行这个方法。在用TP5的时候用的同样的做法是没有问题,请问TP6如何去规避它,或者有什么更好的方法
最佳答案
评论( 相关
后面还有条评论,点击查看>>