由于单元测试,我们的类看起来像这样:
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();
}
}
但是当我运行它时,相同的模型会被覆盖x次,并且只有最后一个会在数据库中。
如何强制laravel将模型保存为数据库中的新模型?我尝试使用exists
属性,但我无法使其正常工作。
答案 0 :(得分: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 :(得分:0)
试试这个
while(...) {
$model = new self;
$model -> name = $name;
....
$model -> save();
}
或者您可以传递数组以插入以创建方法
// Create a new user in the database...
$user = Model::create(['name' => 'John']);