Как сделать уникальное правило с помощью where () в laravel

привет, ребята, я новичок в 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"
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
0
3 209
2

Ответы 2

То, что вы делаете, просто не сработает, потому что:

  1. Вам необходимо предоставить поле проверки
  2. 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, однако

хорошо, но эта проверка всегда возвращает истину, даже если 'last_ingameChange' больше time ();

MAXX3 10.04.2018 10:43

Второе правило проверки проверяло уникальность поля id, поскольку вы не меняли значение по умолчанию. Также используйте using для сложных условий. Попробуй обновить

apokryfos 10.04.2018 11:10

Попробуй это

Rule::unique('users')->ignore($id, 'ingame_name')->where(function ($query) {
    return $query->where('last_ingameChange',  '<', time());
})

хорошо, но эта проверка всегда возвращает истину, даже если 'last_ingameChange' больше time ();

MAXX3 10.04.2018 10:43

@ MAXX3 можно сделать проверку до: дата Пример до: время ()laravel.com/docs/5.6/validation#rule-before

Mike Foxtech 10.04.2018 11:12

Другие вопросы по теме