Я изо всех сил пытаюсь получить экземпляр модели с глобальными областями действия.
Обычно, если вы напишите:
$offer = Offer::createNew();
с
public static function createNew()
{
return static::create([
'user_id' => auth()->id(),
'reviewed' => false
]);
}
Вы получите модельпример.Но теперь я добавил глобальную область и не могу заставить ее работать.
Модель "почти" пуста, как вы ожидаете, потому что в моем случае я хочу получать только те предложения, которые были рассмотрены.Однако, если я добавлю:
public static function createNew()
{
return static:::withoutGlobalScopes()->create([
'user_id' => auth()->id(),
'reviewed' => false
]);
}
, я получу результат от ограниченной модели, которая содержит только эти атрибуты:
#attributes: array:5 [
"user_id" => 1
"reviewed" => false
"updated_at" => "2018-09-24 11:48:27"
"created_at" => "2018-09-24 11:48:27"
"id" => 2
]
Но моя модель имеет явно больше атрибутов, чем эта.Если я добавлю get (), я получу только
Illuminate\Database\Eloquent\Collection {#1635
#items: []
}
Так как бы вы получили модель с create при наличии глобальной области видимости?
Edit
Мой первый обходной путь выглядит следующим образом:
public static function createNew()
{
$model = static::create([
'user_id' => auth()->id(),
'reviewed' => false
]);
return static::withoutGlobalScopes()->find($model->id);
}
Edit 2
Мой Globalscope выглядит следующим образом:
class FoodScope implements Scope
{
public function apply(Builder $builder, Model $model)
{
$builder->where('reviewed', true)
->where('paused', false);
}
}