У меня есть модель 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.