Функция Laravel, зарегистрированная на контроллере, всегда срабатывает, как ее вызвать после нажатия кнопки - PullRequest
0 голосов
/ 03 июля 2019

Итак, я обнаружил, что до того, как я запускаю свою функцию в контроллере для обновления данных, данные обновляются без нажатия кнопки.Я также пытаюсь отложить его с помощью sleep(), но он всегда срабатывает первым.

Я хочу рассчитать данные с ложным значением столбца отключения, а после вычисления в функции score () вернуть значение из функции вычисления, сохраненной в базе данных, а затем нажать кнопку, чтобы обновить столбец отключения до истинного с помощью функции update () (чтобы вычисленные данные не рассчитывались снова)

мой контроллер: функция для получения данных для вычисления:

public function getShowResultOfQuiz($id){      
            History::create([
                'user_id'=>$user,
                'jenis_quiz_id'=>$id,
                'score'=> $score,
                'kelas' => $kelas,
                'instansi' => $instansi
            ]); 
                $categoryquiz= JenisQuiz::find($id);
                $user=Auth::user()->id;



                $score=0;
                $score=$this->score(); // function to calculate data



                $kelas = Auth::user()->kelas;
                $instansi = Auth::user()->instansi;

                    switch ($id) {
                        case '1':
                        return view('user.pages.quizresult',compact('score','categoryquiz','sarans','answers'));

                        break;

                        case '2':
                        return view('user.pages.quizanxietyresult',compact('score','categoryquiz','answers','sarans'));
                        break;

                        case '3':
                        return view('user.pages.quizdepresiresult',compact('score','categoryquiz','$answers','$sarans'));
                        break;
                    }

                } 

функция для вычисления данных:

public function score(){

    $user_data = Auth::user();
    $answers = $user_data->answer()->select('user_answer')->where('disable','=',false)->get();

               $a=0;
    $b = 0;
    $c = 0;
    if($answers->count()) {
        foreach ($answers as $answer) {
            switch ($answer->user_answer) {
                case 1:
                $a++;
                break;
                case 2:
                $b++;
                break;
                case 3:
                $c++;   
                break;
            }
        }

    }
    return $a+$b+$c;
}

функция для обновления:

public function update(){
                sleep(30);
                $user_id = Auth::user()->id;
                        $user_data = User::find($user_id);
                        $answers_update = $user_data->answer()->whereDisable(false);
                        $answers_update->update(array("disable" => true));
            }

Икогда я в поле зрения user.pages.quizresult есть кнопка для запуска функции обновления

ожидаемо: ответ на вызов данных с отключенным значением false -> вычислить его в функции счета -> сохранить счет в базе данных -> отключить отключение данныхзначение = true

проблема: отключить отключение данных true -> данные ответа не могут быть получены с помощью функции оценки

1 Ответ

0 голосов
/ 03 июля 2019

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

public function update()
{
    // your function, no need for sleep now
    $user_id = Auth::user()->id;
    $user_data = User::find($user_id);
    $answers_update = $user_data->answer()->whereDisable(false);
    $answers_update->update(array("disable" => true));

    // redirect to your route for getShowResultOfQuiz
    return Redirect::route('your.route', $whicheverIDThisShouldBe);
}

Это перенаправит вас обратно на ваш основной маршрут и отобразит вашу страницу так, как вы ожидаете. Удалить вызов $ this-> update в getShowResultOfQuiz.

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