我一直在laravel的一个学校项目上工作,我希望能够在我的数据库中更新我现有的记录,我已经为它做了一个功能但是当我点击更新按钮时我的数据库中的Updated_at字段已更新,没有其他内容,即使我更改了编辑表单上的每个属性,我也观看并遵循Laracasts laravel基础系列,但它给了我相同的结果。
这是我为其制作的存储和编辑方法
public function update(Request $request, $id)
{
//$product = Product::findOrFail($id) = finding the Id of the Product i want to update
$product = Product::FindorFail($id);
// Requesting a update query on the attributes: name , buy price, sell price, and the foreign_key
$product->update($request->only(['naam', 'inkoopPrijs', 'verkoopPrijs', 'Fabrieken_Id']));
return redirect(Route('producten.index'));
}
这是模仿它的模型。
class Product extends Model
{
protected $fillable = ['Id', 'naam', 'inkoopPrijs', 'verkoopPrijs', 'Fabrieken_Id', 'updated_at', 'created_at'];
protected $table = "producten";
public function fabriek()
{
return $this->BelongsTo('App\Fabriek', 'Fabrieken_Id');
}
当我在var_dump($ product)中说它只是在上面说的只更新了Updated_at字段而没有别的。
如果我需要更多信息,请告诉我,我会将其添加到问题中
答案 0 :(得分:1)
更新方法适用于MASS更新,而不是单个记录的更新,详见此处:
https://laravel.com/docs/5.3/eloquent#updates
您需要的是save()
更新特定记录。您可以将其与fill()
结合使用,以便从请求数据数组中进行更新。
public function update(Request $request, $id)
{
$product = Product::FindorFail($id);
$product->fill($request->only(['naam', 'inkoopPrijs', 'verkoopPrijs', 'Fabrieken_Id']));
$product->save();
return redirect(Route('producten.index'));
}
答案 1 :(得分:0)
你必须这样写:
public function update(Request $request, $id)
{
$product = Product::find($id);
$product->name = $request->get('naam'); #naam : name of input field
$product->attribute2 = $request->get('inkoopPrijs');
$product->attribute3 = $request->get('verkoopPrijs');
$product->attribute4 = $request->get('Fabrieken_Id');
$product->save();
return redirect(Route('producten.index'));
}
或者保持更新方法,但在产品型号中添加此行 -
protected $fillable = ['name', 'attribute2', 'attribute3', 'attribute4'];
P.S:如果您使用FindOrFail,那么您应该使用try catch