Php laravel雄辩地创建新记录,而无需在save()方法之前重复new关键字
我在Laravel中编写了以下代码:Php laravel雄辩地创建新记录,而无需在save()方法之前重复new关键字,php,laravel,eloquent,Php,Laravel,Eloquent,我在Laravel中编写了以下代码: $setting = new Setting; $setting->name = 'name1'; $setting->save(); $setting->name = 'name2'; $setting->save(); 执行后,我在数据库中只看到name2 但在我执行此代码之后: $setting = new Setting; $setting->name
$setting = new Setting;
$setting->name = 'name1';
$setting->save();
$setting->name = 'name2';
$setting->save();
执行后,我在数据库中只看到name2
但在我执行此代码之后:
$setting = new Setting;
$setting->name = 'name1';
$setting->save();
$setting = new Setting;
$setting->name = 'name2';
$setting->save();
两条记录都保存正确,因此我有name1
和name2
我不明白为什么用$setting=新设置重新分配$setting
变量代码>这么重要吗
$setting
的类型是设置对象
为什么要重新分配它?这有什么帮助
它是如何工作的?为什么第一次剪断不起作用
例如,在本PHP代码段中:
<?php
class Foo{
public $name;
public function bar(){
echo $this->name;
}
}
$obj1 = new Foo;
$obj1->name = 'object_one';
$obj1->bar();
//////$obj1 = new Foo;// we don't need this line in this snippet
$obj1->name = 'object_two';
$obj1->bar();
var_dump($obj1); // answer is object(Foo)#1
如果在设置的$filleble
属性中有'name'
,则可以使用create()
Setting::create(['name'=>'name1']);
设置::创建(['name'=>'name2']);
您需要在代码中重新分配它的原因是$setting
绑定到设置
模型。如果不重新分配,则所做的任何操作都会导致更新,而不是插入新设置
下面是一个表格来说明:
代码
$setting
设置#2{
+id:2
+名称:'name3'
+创建时间:'2021-03-19 20:00:20'
+更新时间:'2021-03-19 20:00:20'
这一点很重要,因为如果不重新指定$setting=new setting
,您就是在修改同一条记录,而不是创建新记录。注意new
关键字。
$setting = new Setting;
Setting#1{}
$setting->name = 'name1';
Setting#1{
+name: 'name1'
}
$setting->save();
Setting#1{
+id: 1
+name: 'name1'
+created_at: '2021-03-19 20:00:00'
+updated_at: '2021-03-19 20:00:00'
}
$setting->name = 'name2';
Setting#1{
+id: 1
+name: 'name2'
+created_at: '2021-03-19 20:00:00'
+updated_at: '2021-03-19 20:00:00'
}
$setting->save();
Setting#1{
+id: 1
+name: 'name2'
+created_at: '2021-03-19 20:00:00'
+updated_at: '2021-03-19 20:00:05'
}
$setting = new Setting;
Setting#2{}
$setting->name = 'name3';
Setting#2{
+name: 'name3'
}
$setting->save();
Setting#2{
+id: 2
+name: 'name3'
+created_at: '2021-03-19 20:00:20'
+updated_at: '2021-03-19 20:00:20'
}