2

我有一张看起来像这样的桌子

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

我试图通过使用验证器以“正确”的方式做到这一点,但也许这并不意味着它......

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

4

1 回答 1

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

于 2015-05-27T15:33:12.693 回答