Как сравнить строку запроса с последней вставленной строкой в ​​таблице, используя laravel Фасад правила - PullRequest
0 голосов
/ 04 мая 2020

У меня есть пользовательский код, в котором проверяется телефонный код подтверждения:

Код:

$validator = Validator::make($request, [
    'confirm_code' => [
        'required',
        Rule::exists('confirm_codes')->where(function($query) use($request) {
            $query->where('phone', $request->phone)
                  ->where('confirm_code', $request->confirm_code)
        })
    ]
]);

Эта проверка работает, но проверяет существующий любой код подтверждения, телефон которого соответствует запросу Телефон. Но мне нужно проверить код подтверждения запроса с последним введенным кодом подтверждения по дате из confirm_codes таблицы, телефон которой равен телефону запроса.

Попытка:

Rule::exists('confirm_codes')->where(function($query) use($request) {
    $query->where('phone', $request->phone)
          ->where('confirm_code', $request->confirm_code)
          ->orderBy('created_at', 'desc');                          // added this line <--
})

Но это решение не работает. Как я могу сделать, как эта проверка, используя Rule фасад?

1 Ответ

0 голосов
/ 04 мая 2020

Вы можете создать пользовательское правило, используя closure :

$validator = Validator::make($request, [
    'confirm_code' => [
        'required',
        function ($attribute, $value, $fail) {

            $latest = DB::table('confirm_codes')->latest()->first();

            if ($request->phone === $latest->phone && $value === $latest->confirm_code) {
                $fail('[enter your error message here]');
            }

        },
    ],
]);
...