Laravel 5.2更新功能

时间:2016-11-23 10:54:24

标签: laravel laravel-5.2

我一直在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字段而没有别的。

如果我需要更多信息,请告诉我,我会将其添加到问题中

2 个答案:

答案 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