我想将$params['user_id']
传递给$ fieldValidations并检查小时是否对于特定的user_id
是唯一的,而不是对于数据库表中的所有小时hour
都是唯一的
我创建了一个模型帖子
class Post extends Model
{
protected $fillable = ['user_id', 'hour'];
public static $fieldValidations = [
'user_id' => 'required',
'hour' => 'required|date_format:Y-m-d H:i:s|unique:post,hour,NULL,user_id,'
];
}
和控制员职位
class PostController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index(Request $request)
{
$params = $request->all();
$params['user_id'] = 12;
$validator = Validator::make($params, Post::$fieldValidations);
if ($validator->fails()) {
return Response::json($validator->errors()->all(), 422);
}
}
}
答案 0 :(得分:2)
我认为您无法使用唯一的验证规则来执行此操作。从Laravel 5.7文档中:
The field under validation must be unique in a given database table.
请注意,它说的是表格而不是列。
您可能只需要查询数据库并在失败时返回JSON响应错误。另外,在验证规则中的当前代码中,您要指定user_id是发布表中的主ID关键字列。我认为这很可能是一个错误,应该将其删除,即使它与无关紧要,因为您无法使用唯一规则来完成所需的操作。另外,您以逗号结束了规则。
if (Post::where(['user_id' => $params['user_id'], 'hour' => $params['hour']])->exists()) {
return response()->json(['status' => 'error', 'msg' => 'Error', 'errors' => ['hour_error' => ['That hour already exists on the user!']]], 422);
}
最后,我更喜欢使用$params = $request->all()
辅助函数,而不是使用request()
并将其内联到其余代码中。但是,这取决于您。