Проверка существующей записи на основе двух полей - PullRequest
2 голосов
/ 03 апреля 2019

Я пытаюсь вставить какую-то запись, проверив, выполнены ли определенные условия. Что я планирую сделать, так это запретить пользователям голосовать дважды в день. Я использую электронную почту и дату в качестве параметров.

public function store(Request $request)
        {
            $this->validate($request, [

                'flavour' => 'required|string',
                'email' => 'required|email',
                'lastname'=> 'required|string',
                'firstname' => 'required|string'

            ]);

            $vote = new Vote();
            //$currentDate = Carbon::now()->toDateString();
            $today = Carbon::now()->format('Y-M-D');

                $dup = Vote::where(['email' => $request->email, 'created_at' => $today ])->get();
                if (!$dup)
                {
                $vote->firstname = $request->firstname;
                $vote->lastname = $request->lastname;
                $vote->email   = $request->email;
                $vote->flavour = $request->flavour;
                $vote->voter_ip = $request->ip();
                }
                else {
                    return response()->json([
                        'message' => 'You have voted today, please wait till another day!'
                   ]);
                }



              if (auth()->user()->votes()->save($vote))
                return response()->json([
                    'success' => true,
                    'data' => $vote->toArray()
                ]);
            else
                return response()->json([
                    'success' => false,
                    'message' => 'Vote could not be added'
                ], 500);
        }

Проблема, с которой я сталкиваюсь сейчас, заключается в том, что она не требует никакой записи, поскольку на ней отображается сообщение «Вы проголосовали сегодня, подождите, пожалуйста, до другого дня», даже если я вставлю новое электронное письмо и / или текущего пользователя с разными электронными письмами.

1 Ответ

2 голосов
/ 03 апреля 2019

Во-первых, мне пришлось создать в моей миграции поле с именем "voted_at" и изменить порядок кода для проверки существующей записи на основе voted_at и электронной почты пользователя

public function store(Request $request)
            {
                $this->validate($request, [

                    'flavour' => 'required|string',
                    'email' => 'required|email',
                    'lastname'=> 'required|string',
                    'firstname' => 'required|string'

                ]);
                $today = Carbon::now()->toDateString();
                $dup = Vote::where(['email' => $request->email, 'voted_at' => $today ])->exists();
                    if ($dup){
                        return response()->json([
                            'data' => $dup,
                            'message' => 'You have voted today, please wait till another day!'
                       ]);
                    }
                else {
                    $vote = new Vote();
                    $vote->firstname = $request->firstname;
                    $vote->lastname = $request->lastname;
                    $vote->email   = $request->email;
                    $vote->flavour = $request->flavour;
                    $vote->voter_ip = $request->ip();
                    $vote->voted_at =  $today;
                if (auth()->user()->votes()->save($vote))
                    return response()->json([
                        'success' => true,
                        'data' => $vote->toArray()
                    ]);
                else
                    return response()->json([
                        'success' => false,
                        'message' => 'Vote could not be added'
                    ], 500);
                }

            }

Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...