Laravel 5.7 REST api,更新节错误

时间:2018-11-27 02:44:54

标签: laravel api eloquent

CreateDeleteShow部分也正常工作。我不知道怎么了。

这是我的请求(当我调用资源路由的PUT时):

============
Request body
============
name: John doe
detail: An insteresting detail
type: A fancy type

===============
Request Headers
===============
Accept: application/json
Authorization: Bearer my_secret_token

错误

  

“消息”:“没有对模型[App \ Product]的查询结果。”

Api \ Controller

public function update(Request $request, Product $product)
{
    $input = $request->all();


    $validator = Validator::make($input, [
        'name' => 'required',
        'detail' => 'required'
    ]);


    if($validator->fails()){
        return $this->sendError('Validation Error.', $validator->errors());       
    }


    $product->name = $input['name'];
    $product->detail = $input['detail'];
    $product->save();


    return $this->sendResponse($product->toArray(), 'Product updated successfully.');
}

2 个答案:

答案 0 :(得分:2)

如果您使用的是路由模型绑定(看起来如此),请确保使用正确的端点来更新资源:

PUT /products/{product}
// so this means, for example:
PUT /products/3

然后,Laravel将自动找到id为3的产品。

public function update(Request $request, Product $product) // <-- here is injected.
{
    // the rest of your code..
}

另一个选择是手动查找资源。如果您的路线是这样的:

PUT /products/{id}

如果要轻松管理响应,请按以下步骤查找:

public function update(Request $request)
{
    // find it
    $product = Product::find($request->get('id'));

    // check if exists
    if (! $product)
    {
        return response()->json(['errors' => 'This product does not exist, dude!'], 404);
    }

    // the rest of your code..
}

或这样引发异常:

public function update(Request $request)
{
    // find it
    $product = Product::findOrFail($request->get('id'));

    // the rest of your code..
}

答案 1 :(得分:1)

输入您的项目文件夹

cd /laravel/your/path_of/api_project

并执行以下命令

php artisan route:list

,你将有一个包含方法的名称一个完整的表来使用他们的URL和每个方法来使用(POST,GET,...)

输出示例----

| PUT|PATCH | api/companys/{company}|  companys.update| App\Http\Controllers\CompanysController@update|