2017-11-20 15 views
0

Laravelのテーブルを更新する際に質問があります。私はUserCarモデルを持っています。以下の実施例、更新のためにLaravel 5.4 - Eloquent Relationship Update

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); 
    }  
} 

、私は、私のコントローラ上のコードの下に

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(); 
} 
を使用しています

私はあなたにできる私はそれを正しくやっているかどうかを知りたいです。

正確か、より良い方法がありますか。

答えて

4

2つのモデル間のリレーションを使用するときは、リレーション内にあるようにリレーションを更新する方がよいでしょう。そう、あなたはほとんど正しい。詳細については、コントローラ以外の別のREQUESTファイルを使用する方が良いでしょう。経験に基づいたもう1つのことは、関係を最初に更新する方が良いです。答えを

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(); 

}

+0

ありがとう:全体的にはこのようなものになります。別のリクエストファイルに関して、別の方法でそれらを分けることを意味しますか? – Khairul

+0

@Khairulいいえ、これは次のような意味です:php artisan make:SomethingRequestをリクエストします。そこでは、より詳細な情報を得るために、そこでバリデーションを変更することができます:https://laravel.com/docs/5.5/validation#creating-form-requests ..この助けを願って –

関連する問題