【问题标题】:Laravel 7 in update function update errorLaravel 7 在更新功能更新错误
【发布时间】:2020-07-13 06:30:42
【问题描述】:

我正在尝试制作一个允许登录管理员编辑产品的 Laravel 项目。编辑视图可以工作,但是一旦保存更改,它就会在 null 错误上引发对成员函数 update() 的调用。

public function edit($id)
{
    $products = Product::with(['categories'])->find($id);
    $categories = Category::all();

    return view('products.edit', compact('products', 'categories'));
}

public function update(Request $request, $id)
{
    $product = Product::find($id);
    $product->update($request->only(['name', 'description', 'weight', 'price']));
    $product->categories()->sync($request->get('category_id'));

    return redirect('/products');
}

但是,我收到以下错误:

在 null 上调用成员函数 update()

视图/刀片

 <div style="width: 50%;position: relative;left: 20%;top: 30px;">
        <form method="POST" action="{{route('products.update',['id',$products->id])}}">
            @csrf
            @method('PUT')
            <div class="card">
                <div class="card-body">
                    <h1 style="text-align: center">
                        Edit Product {{$products->name}}
                    </h1>
                    <div class="form-group" style="display: grid;background: cornsilk;">
                        <div class="form-group">
                            <label for="name">Name:</label>
                            <input name="name" value="{{$products->name}}" class="form-control">
                        </div>
                        <div class="form-group">
                            <label for="description">Description:</label>
                            <input name="description" value="{{$products->description}}" class="form-control">
                        </div>
                        <div class="form-group">
                            <label for="weight">Weight:</label>
                            <input name="weight" value="{{$products->weight}}" class="form-control">
                        </div>
                        <div class="form-group">
                            <label for="price">Price:</label>
                            <input name="price" value="{{$products->price}}" class="form-control">
                        </div>
                        <div class="form-group">
                            <label for="category">Category:</label>
                            <select name="category_id[]" class="form-control" multiple>
                                @foreach($categories as $category)
                                    <option value="{{$category->id}}"
                                        {{$products->categories->contains('id',$category->id) ? 'selected':''}}
                                    >{{$category->name}}</option>
                                @endforeach
                            </select>
                        </div>
                        {!!  Form::submit('submit',['class','btn btn-success']) !!}
                    </div>

                    @if ($errors->any())
                        <div class="alert alert-danger" style="direction: rtl;text-align: right">
                            <ul>
                                @foreach ($errors->all() as $error)
                                    <li>{{ $error }}</li>
                                @endforeach
                            </ul>
                        </div>
                    @endif
                </div>
            </div>
        </form>
    </div>

【问题讨论】:

  • 你的路线不对&lt;form method="POST" action="{{route('products.update',['id',$products-&gt;id])}}"&gt;改成&lt;form method="POST" action="{{route('products.update',$products-&gt;id)}}"&gt;
  • 感谢你的工作!

标签: laravel eloquent laravel-7


【解决方案1】:

您的路线在表单部分有误。

 <form method="POST" action="{{route('products.update',['id',$products->id])}}"> 

应该如下所示

<form method="POST" action="{{route('products.update',$products->id)}}">

【讨论】:

    【解决方案2】:

    改变这个:

    <form method="POST" action="{{route('products.update',['id',$products->id])}}">
    

    到:

    <form method="POST" action="{{route('products.update',['id' => $products->id])}}">
    

    问题是 ['id',$products->id] 路由参数。它是一个有 2 个索引的数组:'id':string 和 $products->id:int,你只需要产品 id。

    你可以使用

    route('products.update', $products-&gt;id)

    route('products.update',['id' =&gt; $products-&gt;id]

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-31
      • 2019-11-29
      • 2020-02-14
      • 1970-01-01
      • 2017-05-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多