What's difference between Laravel Model functions "create" and "insert"?

Laravel Model allows two functions for inserting the values to the database table. They are

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

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

I found they perform similar operations. What’s difference between them?

Here is Solutions:

We have many solutions to this problem, But we recommend you to use the first solution because it is tested & true solution that will 100% work for you.

Solution 1

insert() :

If you using insert() method you can’t default created_at and updated_at database column
it will be null

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

create() :
when we use create method you must define this model in fillable fields

Add in Your Model

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

Add your Controller

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

then we can use create method without **mass assignment error **
basically here , table defined fields are protected in your model

you should define which model attributes you want to make mass assignable. You may do this using the $fillable property on the model

Solution 2

The model does not have an insert, calling Model::insert results in a call to (the Query Builder) Builder::insert through the __call() magic method which then avoids the Eloquent benefits like setting the timestamps for created_at and updated_at fields.

It also avoids the Mass-assignment protection which Eloquent protects you from inserting unintentional data.

So I would always use create or setting each field separately (if you need to modify the incoming data) and call save() on the model instance.

Solution 3

Insert method :
The insert method accepts an array of column names and values.using this method you can insert data without specify fillable and guarded attribute on the model and here created_at and updated_at values put as NULL value by default.

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

Create method
The create method also used to insert a new model in a single line. It’s instance will return you from that method. before using create() will need to specify fillable or guarded attribute on model its protect against mass-assignment by default and its auto fillable value for create_at and updated_at

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

Solution 4

save()

save() method is used both for saving new model, and updating existing one. here you are creating new model or find existing one, setting its properties one by one and finally saves in database.

save() accepts a full Eloquent model instance

create()

while in creating method you are passing an array, setting properties in model and persists in the database in one shot.
create() accepts a plain PHP array

Note: Use and implement solution 1 because this method fully tested our system.
Thank you 🙂

All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0

Leave a Reply