@Camaro67
Помог? - "Отметить решением"

Возможно ли выполнить firstOrCreate не задавая $fillable в самой модели?

Здравствуйте!

Суть вопроса собственно в заголовке. Например, вместо Model::create(...) можно выполнить Model::forceCreate(...). А что-нибудь подобное для firstOrCreate можно сделать т.е. не указывая $fillable или $guarded в самой модели? Пробовал что-то вроде этого Model::newModelInstance()->fillable(['field'])->firstOrCreate(...), но это естественно не работает.

Такой вариант тоже не шибко нравится т.к. отключает полностью разрешения на массовые заполнения, пока опять не включишь.
Model::unguard();
Model::firstOrCreate(...);
Model::reguard();
  • Вопрос задан
  • 111 просмотров
Решения вопроса 1
mashletov
@mashletov
Math.random()
$model = Model::first() ?? Model::forceCreate(...);
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@iljaGolubev
Так не сработает.
Но вы можете переопределить в смоей модели метод
public function firstOrNew(array $attributes, array $values = [])
    {
        if (! is_null($instance = $this->where($attributes)->first())) {
            return $instance;
        }
        // return $this->newModelInstance($attributes + $values);
       // create new logic
       DB::insert('insert into table (id) values (?)', [100500]);
       return $this->find(100500)
    }
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы