Laravel如何将模型作为新模型保存到数据库中


Laravel how save a model to the database as a new one?

由于单元测试,我们的类看起来是这样的:

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属性,但我不能使它工作。

您可以使用newInstance方法创建新的对象实例:

while(...) {
    $model = $this->model->newInstance();    
    $model->property = "x-value";
    $model->sub_id   = $otherModel->id;
    //Other props...
    $model->state = model::STATE;
    $model->save();
}

然而,如果你在这个循环中创建了许多相同或相似的对象,你可以使用replicate方法来创建一个基本对象,并只改变一些属性。

try this

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

或者你可以传递一个数组来插入创建方法

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