Laravel Model allows two functions for inserting the values to the database table. They are
Create:
User::create([\'id\'=>1,\'name\'=>\'stack\']);
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'=>'test@gmail.com']);
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'=>'test@gmail.com'])
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
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.