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

Wha*_* If 2 php laravel eloquent laravel-5

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

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

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

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

nak*_*kov 5

该模型没有insert, 调用结果是通过魔术方法Model::insert调用(查询生成器),从而避免了 Eloquent 的好处,例如设置for和字段。Builder::insert__call()timestampscreated_atupdated_at

它还避免了批量赋值保护,Eloquent 可以防止您插入无意的数据。

因此,我总是会单独使用create或设置每个字段(如果您需要修改传入数据)并调用save()模型实例。


Hit*_*esh 5

插入() :

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

DefaultUser::insert(['username'    =>  $request->username, 'city'  =>  $request->city, 'profile_image' =>  $request->profile_image]);
Run Code Online (Sandbox Code Playgroud)

create() : 当我们使用 create 方法时,您必须在可填充字段中定义此模型

添加您的模型

 protected $fillable = ['username','city', 'profile_image'];
Run Code Online (Sandbox Code Playgroud)

添加您的控制器

DefaultUser::create(['username'    =>  $request->username, 'city'  =>  $request->city, 'profile_image' =>  $request->profile_image]);
Run Code Online (Sandbox Code Playgroud)

然后我们可以使用 create 方法而没有 **mass assignment error ** 基本上在这里,表定义的字段在您的模型中受到保护

您应该定义要使质量可分配的模型属性。您可以使用模型上的 $fillable 属性执行此操作