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

时间:2015-03-19 17:09:08

标签: laravel laravel-5 laravel-validation

我有一张看起来像这样的表

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

1 个答案:

答案 0 :(得分:0)

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

$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。