2015-08-17 1 views
0

Из-за модульное тестированием наших классов выглядит следующим образом:Laravel как сохранить модель в базе данных как новую?

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, но я не мог заставить его работать.

ответ

1

Вы можете использовать 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

В этом случае, когда я использую модульное тестирование будет издевались над моделью я проходил мимо переопределен? – NoNameProvided

0

попробовать это

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

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

// Create a new user in the database... 
$user = Model::create(['name' => 'John']); 
Смежные вопросы