1

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

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

我有一个隐藏任何Publisher地方Collection的全局范围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 [App\Collection] 12

12 是Collection创建的 ID。它按预期在数据库中,因此该部分有效。

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

奇怪的是,$publisher = Publisher::create($request->all());在我的控制器中,Publisher即使它应用了相同的全局范围,它也会返回创建的

有任何想法吗?

更新:我已经缩小了问题的范围,它是由Collection使用 koenhoeijmakers/laravel-translatable 包引起的。所以我仍在寻找一种方法来忽略这个 create 语句的范围。

4

1 回答 1

0

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

我已经通过不应用中间件来解决问题,该中间件在导致问题ApprovedScopestore路由上应用 。

于 2020-04-25T22:08:29.873 回答