Laravel 7 игнорировать глобальную область при создании - PullRequest
1 голос
/ 23 апреля 2020

У меня есть модель Publisher, которая имеет отношение многие ко многим к Collection

Оба имеют свойство с именем approved, которое устанавливается в false при первоначальном создании

I имеют глобальную область видимости, которая скрывает любые 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. Он находится в БД, как и ожидалось, поэтому эта часть работает.

Я пытался применить withoutGlobalScope(ApprovedScope::class) к оператору create как до, так и после create(), но это, похоже, не помогает.

Странная вещь в том, что $publisher = Publisher::create($request->all()); в моем контроллере возвращает созданное Publisher, даже если к нему применена та же глобальная область действия

Есть идеи?

Обновление: I сузили проблему, и это вызвано Collection использованием koenhoeijmakers / laravel -переводимого пакета. Поэтому я все еще ищу способ игнорировать область действия этого оператора create.

1 Ответ

0 голосов
/ 26 апреля 2020

После тщательного изучения и некоторой помощи выяснилось, что это было результатом пакета koenhoeijmakers/laravel-translatable на Collection

Я решил проблему, не применяя промежуточное ПО, которое применяет ApprovedScope на store маршрутах, где это вызывало проблемы.

...