Laravel 验证器:存在规则的复杂规则

Laravel validator: complex rule for exists rule

我有一个 table 看起来像这样

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 小时。

我正在尝试通过使用验证器以 "right" 的方式来做到这一点,但也许这并不适合它...

注意:我不能在每封带有 vote_count 的电子邮件中只包含 1 个条目,因为我需要为每次投票存储诸如 vote_date 之类的信息,即使它来自同一个人。

我决定在这个复杂的场景中不使用验证器,而只查询数据库,它简单有效。

$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');

如果电子邮件在过去 24 小时内投票过,则 voteDate 将为 null。