我有一个关于在Laravel中更新表的问题。我有User
和Car
模型。示例如下,
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();
}
我可以更新表格,但想知道我是否正确行事。
是否有准确或更好的方法。
答案 0 :(得分:9)
当你使用两个模型之间的关系时,如果你在关系中更新它们会更好。所以,你几乎是对的。但是对于更多信息,如果您使用除控制器之外的单独REQUEST文件,则会更好。基于经验的另一件事是,当你首先更新关系时,它会更好。总的来说,这将是这样的:
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();
}