Можно ли использовать значение другого поля при проверке многомерного массива в Laravel 5.8? - PullRequest
2 голосов
/ 08 мая 2019

У меня есть многомерный массив, содержащий даты, и я хочу проверить, что даты находятся на расстоянии более 18 лет.

Я использую Laravel Validator, но получаю ошибку:

«DateTime :: __ construct (): не удалось проанализировать строку времени (DateofBirth) в позиции 0 (D): часовой пояс не найден в базе данных».

Я использую кодкак показано ниже:

$validator = Validator::make($members, [
    '*.DateofBirth'  => "required|date|before:" . now('Africa/Nairobi')->addYears(-18),
    '*.DateEmployed' => 'date|before_or_equal:today|after:'.Carbon::parse(*.DateofBirth)->addYears(18),
]);

Как я могу передать "* .DateofBirth" при проверке DateEmployed?

1 Ответ

0 голосов
/ 08 мая 2019

Вы можете использовать значение другого поля для правил before и after, однако вы не можете манипулировать этим значением.

Один из способов обойти это - использовать Закрытие пользовательской проверки :

'*.DateEmployed' => [
    'date',
    'before_or_equal:today',
    function ($attr, $value, $fail) use ($members) {

        $date = Carbon::parse($value);
        $dob = Carbon::parse(data_get($members, str_replace('DateEmployed', 'DateofBirth', $attr)));

        if ($dob->addYears(18)->isAfter($date)) {
            $fail('The :attribute must be at least 18 years after DateofBirth');
        }
    },
],
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...