Валидатор Laravel: сложное правило для существующего правила

У меня есть таблица, которая выглядит вот так

vote_id
voter_email
target_id
vote_date

Избиратель может голосовать один раз в день за каждый target_id. Я пытаюсь подтвердить голоса, и это то, что у меня есть

['email' => "exists:participants_votes,voter_email,target_id,$targetId,vote_date,$date"];

Как я могу проверить дату диапазона? Есть ли способ сделать это без написания собственного кода?

Существует валидатор after:date, но он должен быть в той же области, что и exists:

В основном что-то вроде этого: (хотя этот sql может быть совершенно неправильным)

Select MAX(vote_date) FROM parcitipants_votes WHERE voter_email = ?

тогда я бы проверил, наступила ли эта дата> сейчас - 24 часа.

Я пытаюсь сделать это «правильным» способом, используя валидатор, но, возможно, это не предназначено для этого ...

Примечание. Я не могу иметь только одну запись для каждого электронного письма с параметром vote_count, потому что мне нужно хранить информацию, такую ​​как vote_date, для каждого голоса, даже если она принадлежит одному и тому же человеку.


person user3542112    schedule 19.03.2015    source источник
comment
написать собственное правило.   -  person itachi    schedule 19.03.2015


Ответы (1)


Я решил не использовать валидатор для этого сложного сценария, а просто запросить базу данных, это было просто и эффективно.

$voteDate = \DB::table('participants_votes')
              ->where('voter_email', '=', $user->email)
              ->where('contest_id', '=', $contestId)
              ->where('target_user_id', '=', $targetId)
              ->where('created_at', '>', new \DateTime('now -24 hours'))
              ->pluck('created_at');

voteDate будет иметь значение null, если в электронном письме было голосование в течение последних 24 часов.

person user3542112    schedule 27.05.2015