Как сохранить модель в базе данных как новую?

Из-за модульного тестирования наши классы выглядят так:

class MyObserverClass
{

private $model;

public function __construct(Model $model)
{
$this->model= $model;
}

public function saved(OtherModel $otherModel)
{
//Some condition
while(...) {
//$this->model->exists = false;
$this->model->property = "x-value";
$this->model->sub_id   = $otherModel->id;
//Other props...
$this->model->state = model::STATE;
$this->model->save();
}
}

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

Как я могу заставить laravel сохранить модель как новую в базе данных? Я пытался с exists собственность, но я не мог заставить это работать.

0

Решение

Ты можешь использовать newInstance метод для создания нового экземпляра объекта:

while(...) {
$model = $this->model->newInstance();
$model->property = "x-value";
$model->sub_id   = $otherModel->id;

//Other props...
$model->state = model::STATE;
$model->save();
}

Однако, если вы создадите много одинаковых или похожих объектов в этом цикле, вы можете использовать replicate способ создать один базовый объект и изменить только некоторые свойства.

1

Другие решения

попробуй это

while(...) {
$model = new self;
$model -> name = $name;
....
$model -> save();
}

или вы можете передать массив для вставки, чтобы создать метод

// Create a new user in the database...
$user = Model::create(['name' => 'John']);
0

По вопросам рекламы [email protected]