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

后端 未结 3 1727
春和景丽
春和景丽 2021-01-14 20:50

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

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

相关标签:
3条回答
  • 2021-01-14 21:16

    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'])
    
    0 讨论(0)
  • 2021-01-14 21:20

    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

    0 讨论(0)
  • 2021-01-14 21:30

    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.

    0 讨论(0)
提交回复
热议问题