привет, ребята, я новичок в laravel, и на свой вопрос я искал много сообщений, но не могу найти никакого решения для этого, я буду благодарен, если у вас есть какое-либо руководство или решение.
Я создал уникальное правило с where, но оно не работает и возвращает нулевое значение, как мне это сделать правильно?
в моем случае мне нужно проверить, что значение столбца 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);
}
но исходные правила таковы:
"ingame_name" => "required|min:5|max:255|unique:users,ingame_name,1|unique:users,NULL,NULL,id"






То, что вы делаете, просто не сработает, потому что:
Rule::unique вернет экземпляр Rule, а не строку, поэтому вы не можете объединить его с другой строкой или можете заставить его принудительно перейти к строке, которая, очевидно, потеряет любую информацию, которая у вас была в where.Вы можете использовать массив для хранения правил:
$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, однако
Второе правило проверки проверяло уникальность поля id, поскольку вы не меняли значение по умолчанию. Также используйте using для сложных условий. Попробуй обновить
Попробуй это
Rule::unique('users')->ignore($id, 'ingame_name')->where(function ($query) {
return $query->where('last_ingameChange', '<', time());
})
хорошо, но эта проверка всегда возвращает истину, даже если 'last_ingameChange' больше time ();
@ MAXX3 можно сделать проверку до: дата Пример до: время ()laravel.com/docs/5.6/validation#rule-before
хорошо, но эта проверка всегда возвращает истину, даже если 'last_ingameChange' больше time ();