Laravel: Как получить экземпляр модели после создания, имеющий глобальную область видимости - PullRequest
0 голосов
/ 24 сентября 2018

Я изо всех сил пытаюсь получить экземпляр модели с глобальными областями действия.

Обычно, если вы напишите:

$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);
    }
}

1 Ответ

0 голосов
/ 25 сентября 2018

Это поведение не вызвано глобальной областью действия.

Используйте ->fresh(), если вы хотите получить другие атрибуты:

public static function createNew()
{
    return static::create([
         'user_id' => auth()->id(), 
         'reviewed' => false
    ])->fresh();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...