laravel hasManyThrough是否忽略中间表上的全局作用域?

waxmsbnn  于 2023-01-09  发布在  其他
关注(0)|答案(2)|浏览(205)

我有三张table:公司、游戏和测试。

  • 公司有很多游戏
  • 游戏有很多测试

Game模型有一个全局范围,我可以确认它正在工作:

public function apply(Builder $builder, Model $model)
{
    $builder->where('type', 'live');
}

我使用Game模型进行的任何直接查询都只会返回游戏类型设置为“live”的结果。
我在我的Company模型中使用return $this->hasManyThrough('App\Test', 'App\Games')来获取特定公司的所有测试。
但是,这将返回所有游戏的结果,无论其类型如何。
所以我想知道使用hasManyThrough是否绕过了我在Game模型中设置的全局作用域?
如果是这样的话,有什么办法可以解决这个问题吗?我想确保我所做的所有查询都过滤掉了任何未设置为“实时”的游戏。
干杯

7y4bm7vi

7y4bm7vi1#

需要将->withoutGlobalScopes()添加到关系定义中

class User extends Model
{
   public function games()
   {
      return $this->hasManyThrough(Test::class, Games::class)
             ->withoutGlobalScopes();
   }
}
ymdaylpp

ymdaylpp2#

似乎你必须手动应用你的全局作用域。
类似于:

public function tests()
{
    $ret = $this->hasManyThrough(Test::class, Games::class);
    (new Games())->registerGlobalScopes($ret);
    return $ret;
}

相关问题