Laravel模型函数“创建”和“插入”之间有什么区别?

时间:2019-09-24 07:59:04

标签: php laravel laravel-5 eloquent

Laravel模型允许使用两个函数将值插入数据库表。他们是

创建: @EnableScheduling

插入: User::create(['id'=>1,'name'=>'stack']);

我发现他们执行类似的操作。他们之间有什么区别?

3 个答案:

答案 0 :(得分:3)

该模型没有insert,调用Model::insert会导致通过Builder::insert魔术方法(查询生成器)__call()的调用,从而避免了雄辩诸如为timestampscreated_at字段设置updated_at的好处。

这也避免了Eloquent保护您避免插入意外数据的大规模分配保护。

因此,我将始终使用create或单独设置每个字段(如果需要修改传入数据)并在模型实例上调用save()

答案 1 :(得分:2)

插入():

如果使用insert()方法,则不能默认使用created_at和Updated_at数据库列 将为空

DefaultUser::insert(['username'    =>  $request->username, 'city'  =>  $request->city, 'profile_image' =>  $request->profile_image]);

create(): 当我们使用创建方法时,必须在可填充字段

中定义此模型

添加模型

 protected $fillable = ['username','city', 'profile_image'];

添加您的控制器

DefaultUser::create(['username'    =>  $request->username, 'city'  =>  $request->city, 'profile_image' =>  $request->profile_image]);

然后我们可以使用创建方法而不会出现**质量分配错误** 基本上在这里,表定义的字段在您的模型中受到保护

,您应该定义要批量分配的模型属性。您可以使用模型上的$ fillable属性来完成此操作

答案 2 :(得分:1)

插入方法:   insert方法接受一个由列名和值组成的数组。使用该方法,您可以在不指定模型可填充和受保护属性的情况下插入数据,此处created_at和updated_at值默认为NULL值。

<embed height="1200"  width="100%" [src]="strurl | safe"">

创建方法   create方法还用于在一行中插入新模型。它的实例将从该方法返回您。在使用 create()之前,需要在模型上指定可填充或受保护的属性,其默认情况下防止质量分配,并为create_at和updated_at

自动填充值
User::insert(['userName'=>'manish','email'=>'test@gmail.com']);