嗨,伙计们,我是laravel的新人,对于我的问题,我搜索了许多帖子,但找不到任何解决方案,如果你有任何指导或解决方案,我会感激。
我制定了一个独特的规则,但它不起作用并返回空值,以便我如何以正确的方式做到这一点?
在我的情况下,我需要检查列'last_ingameChange'值必须低于time()否则验证需要返回错误消息“你只需要1周时间来更改你的游戏内用户名”
public function validator(array $data, array $rules)
{
return Validator::make($data, $rules);
}
public function updateUserAccount(Request $request, $id)
{
$rules = [
'required|min:5|max:255|unique:users,ingame_name,'.$id.'|'.Rule::unique('users')->where('last_ingameChange', '<', time())
];
$rr = $this->validator([$request->input('ingame_name')], $rules);
dd($rr);
}
但是initialRules是:
"ingame_name" => "required|min:5|max:255|unique:users,ingame_name,1|unique:users,NULL,NULL,id"
答案 0 :(得分:0)
你正在做的事情根本不起作用,因为:
Rule::unique
将返回Rule
实例而不是字符串,因此您无法将其连接到另一个字符串,或者您可能强制它强制转换为字符串,这显然会丢失您的任何信息在哪里。您可以使用数组来包含规则:
$rules = [
'ingame_name' => [ //Field name
"required",
"min:5",
"max:255",
"unique:users,ingame_name,$id",
Rule::unique('users', 'ingame_name')
->using(function ($q) { $q->where('last_ingameChange', '<', time()); })
]
];
$this->validator($request->all(), $rules);
正如@MikeFoxtech建议最好使用before
规则
答案 1 :(得分:0)
试试这个
Rule::unique('users')->ignore($id, 'ingame_name')->where(function ($query) {
return $query->where('last_ingameChange', '<', time());
})