Laravel 5.4 - Eloquent Relationship Update

36,078

When you use relation between two models it's better if you update them as they are in the relation. so yes you'r almost right . but for more information it's better if you use separate REQUEST file other than in the controller. one more thing based on experience it's better when you update the relation first . overall it will be something like this :

 public function update(SomeRequestFile $request, $id)
 {

     $car = Car::find($id);

     $user = $car->user()
         ->update([
             'name'=> $request->name,
             'ic_number'=> $request->ic_number,
         ]);
     $carDetail = Car::where('id', $id)
         ->update([
             'vehicle_no'=> $request->vehicle_no,
             'location_id' => $request->location_id,
             'created_at' => $request->created_at,
         ]);
     return back();
}
Share:
36,078
Khairul
Author by

Khairul

Updated on January 14, 2020

Comments

  • Khairul
    Khairul over 4 years

    I have a question on updating a table in Laravel. I have a User and Car Model. Example as below,

    User.php

    <?php
    
    namespace App;
    
    use Illuminate\Notifications\Notifiable;
    
    use Illuminate\Foundation\Auth\User as Authenticatable;
    
    class User extends Authenticatable
    {
        use Notifiable;
        protected $guarded = [];
    
        /**
         * The attributes that should be hidden for arrays.
         *
         * @var array
         */
        protected $hidden = [
            'password', 'remember_token',
        ];
    
        public function cars()
        {
            return $this->hasMany(Car::class);
        }
    }
    

    Car.php

    <?php
    
    namespace App;
    
    class Car extends Model
    {
        public function user()
        {
            return $this->belongsTo(User::class);
        }    
    }
    

    For the update, I am using below codes on my controller,

    public function update(Request $request, $id)
    {
          // validations here
    
          $car = Car::find($id);
    
          $carDetail = Car::where('id', $id)
          ->update([
              'vehicle_no'=> $request->vehicle_no,
              'location_id' => $request->location_id,
              'created_at' => $request->created_at,
          ]);
    
          $user = $car->user()
          ->update([
              'name'=> $request->name,
              'ic_number'=> $request->ic_number,
          ]);
    
          return back();
    }
    

    I am able to update the table but want to know if I am doing it right.

    Is there an accurate or a better way of doing it.

  • Khairul
    Khairul over 6 years
    Thanks for the answer. Regarding the separate request file, do you mean to separate them on different method?
  • Alireza Amrollahi
    Alireza Amrollahi over 6 years
    @Khairul no , i mean like this : php artisan make:request SomethingRequest... then you can modify validations in there , for more info :laravel.com/docs/5.5/validation#creating-form-requests .. hope this help