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等信息,即使它来自同一个人。

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

$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将为空。

最新更新