Laravel Model 函数“创建”和“插入”有什么区别?

问题描述 投票:0回答:5

Laravel Model 允许两个函数将值插入到数据库表中。他们是

创建:

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

插入:

User::insert(['id'=>2,'name'=>'overflow']);

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

php laravel laravel-5 eloquent
5个回答
9
投票

插入():

如果您使用 insert() 方法,则无法默认创建的_at 和更新的_at 数据库列 它将为空

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

创建(): 当我们使用 create 方法时,您必须在 fillable fields

中定义此模型

添加您的模型

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

添加您的控制器

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

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

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


5
投票

模型没有

insert
,调用
Model::insert
会导致通过
Builder::insert
魔术方法调用(查询生成器)
__call()
,从而避免了 Eloquent 的好处,例如为
timestamps 设置 
created_at
 
updated_at
字段。

它还避免了批量分配保护,Eloquent 可以保护您免于插入无意的数据。

所以我总是使用

create
或单独设置每个字段(如果您需要修改传入数据)并在模型实例上调用
save()


3
投票

插入方法: insert 方法接受列名和值的数组。使用此方法,您可以插入数据,而无需在模型上指定可填充和受保护的属性,这里的created_at 和updated_at 值默认设置为NULL 值。

User::insert(['userName'=>'manish','email'=>'[email protected]']);

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

User::create(['userName'=>'manish','email'=>'[email protected]'])

1
投票

保存()

save() 方法既用于保存新模型,也用于更新现有模型。在这里您可以创建新模型或找到现有模型,一一设置其属性,最后保存在数据库中。

save() 接受完整的 Eloquent 模型实例

创建()

在创建方法时,您将传递一个数组,在模型中设置属性并一次性保存在数据库中。 create() 接受一个普通的 PHP 数组


0
投票

除了上述之外,insert 和 create 方法的另一个主要区别是,insert 方法的输出是一个布尔值,表示插入成功或失败。但 create 的输出是一个包含存储数据值的对象

© www.soinside.com 2019 - 2024. All rights reserved.