Laravel 7在创建时忽略全局范围



我有一个模型Publisher,它与Collection有多对多关系

两者都有一个名为approved的属性,在最初创建时设置为false

我有一个全局作用域,它隐藏任何PublisherCollection,其中approved === false

public function apply(Builder $builder, Model $model)
{
$columnName = $this->tableName ? $this->tableName . '.approved' : 'approved';
$builder->where($columnName, '=', true);
}

Publisher设置如下:

public static function boot()
{
parent::boot();
self::creating(function (Publisher $publisher) {
$publisher->creator_user_id = Auth::user()->id;
});
self::created(function (Publisher $publisher) {
$collection = Collection::create([
'approved' => (bool)$publisher->approved,
'title'    => '',
]);
$collection->publishers()->sync($publisher->id);
});

问题是Collection::create可以工作,但在应用全局作用域时不会返回创建的Collection。它抛出以下错误:

No query results for model [AppCollection] 12

12是创建的Collection的ID。正如预期的那样,它在DB中,因此该部分可以工作。

我已经尝试在create()之前和之后对create语句应用withoutGlobalScope(ApprovedScope::class),但这似乎没有帮助。

奇怪的是,我的控制器中的$publisher = Publisher::create($request->all());确实返回了创建的Publisher,尽管它应用了相同的全局作用域

有什么想法吗?

更新:我已经缩小了问题范围,它是由Collection使用koenhoeijmaker/laravel可翻译包引起的。因此,我仍在寻找一种方法来忽略这个create语句的作用域。

经过仔细调查和一些帮助,发现这是Collection上的koenhoeijmakers/laravel-translatable包的结果

我已经通过不在store路由上应用ApprovedScope的中间件解决了这个问题,因为这会导致问题。

相关内容

  • 没有找到相关文章

最新更新