【发布时间】:2020-11-05 10:54:36
【问题描述】:
我有一个 products 表和一个 product_reports 表。用户可以举报一个产品,但他应该只能这样做一次,而不是两次或多次。
这是我的产品表:
id, heading, text, price, stock
这是我的产品报告:
id, product_id, user_id, reason
我的产品过期路线:
Route::post('product/{product}/report', ['as' => 'product.report', 'uses' => 'ProductController@report']);
现在我是位于App\Http\Requests 的 ProductReportRequest.php 文件。在那里我检查用户是否被授权,以及他是否发送了一个原因(值):
public function authorize()
{
return Auth::check();
}
public function rules()
{
return [
'value' => [
'required',
'string',
'max:65535'
],
];
}
我现在的问题如下:
如您所见,路由已包含我要为其存储用户报告的产品 (id)。所以我不是在发布请求中将产品 ID 作为属性发送,而是在看起来像这样的 url 中发送,例如:product/5/report。
我现在的目标是添加一个规则,该规则检查 product_reports 表中是否已经有一个用于具有 user_id 的用户的条目,例如2,对于 product_id 为 5 的产品。
如果是这样,请求应该以422 http 代码结束,这是如果请求不符合规则的典型 http 代码。
但请记住,user_id 和 product_id 两者的组合必须是唯一的!因为一个用户可以举报多个产品,而一个产品可以被多个用户举报!
我已经在Laravel docs 中找到了unique 验证规则,但我认为它们只适用于请求属性而不是url。在不发送 user_id 和 product_id 作为请求属性的情况下,如何验证这一点?
PS:我使用的是 Laravel 6.x。
亲切的问候!
【问题讨论】:
标签: php laravel validation eloquent request