【问题标题】:Laravel 5.2 Update FunctionLaravel 5.2 更新功能
【发布时间】:2023-03-31 13:02:01
【问题描述】:

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

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

【问题讨论】:

    标签: laravel laravel-5.2


    【解决方案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'));
    }
    

    【讨论】:

      【解决方案2】:

      你必须这样写:

      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

      【讨论】:

        猜你喜欢
        • 2017-03-18
        • 2016-09-15
        • 2016-05-29
        • 2016-05-13
        • 1970-01-01
        • 2017-03-15
        • 1970-01-01
        • 2017-01-17
        • 2016-07-05
        相关资源
        最近更新 更多