2

私はこのようなテーブルを持っています

vote_id
voter_email
target_id
vote_date

有権者は、各 に対して 1 日 1 回投票できます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_dateなどの情報を保存する必要があるため、vote_countを持つメールごとに1つのエントリを持つことはできません.

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 は null になります。

于 2015-05-27T15:33:12.693 に答える