【问题标题】:Laravel validator: complex rule for exists ruleLaravel 验证器:存在规则的复杂规则
【发布时间】:2015-05-22 22:27:16
【问题描述】:

我有一张像这样的表

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

【问题讨论】:

  • 编写自定义规则。

标签: laravel laravel-5 laravel-validation


【解决方案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');

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

【讨论】:

    猜你喜欢
    • 2020-09-06
    • 2021-05-18
    • 1970-01-01
    • 2020-06-09
    • 1970-01-01
    • 2016-12-17
    • 2020-06-25
    • 2021-12-09
    • 1970-01-01
    相关资源
    最近更新 更多