【发布时间】:2017-03-03 20:23:37
【问题描述】:
我的模型有以下更新功能:
public function update(PartnerRequest $request, $id)
{
$partner = Partner::findOrFail($id);
if(!$partner -> update($request->all())) {
throw new HttpException(500);
}
return response()->json([
'status' => 'ok'
], 201);
}
这是请求文件:
namespace App\Api\V1\Requests;
use Config;
use Dingo\Api\Http\FormRequest;
class PartnerRequest extends FormRequest
{
public function rules()
{
return [
'name' => 'required|unique:partners,' . $this->id . ',id',
'email' => 'email'
];
}
public function authorize()
{
return true;
}
}
如果我删除规则中的异常并将其设为'name' => 'required|unique:partners',则在重复输入的情况下我会收到以下错误消息:
{
"error": {
"message": "422 Unprocessable Entity",
"errors": {
"name": [
"The name has already been taken."
]
},
"status_code": 422
}
}
但问题出在补丁上,我无法更新模型(由于唯一名称规则)。所以,我需要例外。但是,如果我包含它,而不是上面的特定错误,我有一个像这样的通用错误:
"error": {
"message": "SQLSTATE[23000]: Integrity constraint violation: 19 UNIQUE constraint failed: partners.name (SQL: update \"partners\" set \"name\" = test, \"updated_at\" = 2017-03-03 10:47:53 where \"id\" = 3)",
"code": "23000",
"status_code": 500
}
}
路线:
$api->post('partner/store', 'App\\Api\\V1\\Controllers\\PartnerController@store');
$api->get('partner/all', 'App\\Api\\V1\\Controllers\\PartnerController@index');
$api->get('partner/{id}', 'App\\Api\\V1\\Controllers\\PartnerController@show');
$api->patch('partner/{id}', 'App\\Api\\V1\\Controllers\\PartnerController@update');
【问题讨论】:
-
您将验证规则放在
Config中的主要原因是什么? -
使用 Laravel API 的启动器,就像使用它一样。 github.com/francescomalatesta/laravel-api-boilerplate-jwt 但是,我也尝试将规则复制粘贴到文件中,但我仍然有相同的行为。
-
你能为此显示
Route吗? -
@RossWilson 直接在表单请求而不是配置上更新了路由和规则
标签: laravel laravel-5.3 dingo-api