MYSQL СОЗДАТЬ СОБЫТИЕ с Laravel DB :: Statement - PullRequest
0 голосов
/ 06 июня 2019

Этот вопрос относится к обработке Laravels DB :: оператором запросов MySQL с привязками переменных PHP, а не к процессу привязки PDO в PHP, как указано в возможном дубликате здесь .PDO используется в серверной части Laravel eloquent, но структура функции DB :: Statement отличается от способа, которым вы делаете это в методе PDO.

Я пытаюсь заставить функцию хранилища моего контроллера создать событие mysql, когдазапись сохраняется в базе данных.Когда форма отправлена, Laravel выдает ошибку

'SQLSTATE [HY093]: недопустимый номер параметра: число связанных переменных не соответствует количеству токенов (SQL: CREATE EVENT test ON SCHEDULE EVERY 5MINUTE DO UPDATE пейджеры SET escalation_level = escalation_level + 1 WHERE id =: issue) '.

Я пытаюсь воссоздать следующий запрос MySQL

CREATE EVENT test ON SCHEDULE EVERY 5 MINUTE DO UPDATE issues SET escalation_level = escalation_level + 1 WHERE id = 'Rd8409347-70bb-4e3e-b351-b49c10ce9a2a';

Мне кажется, чтоУ меня есть 1 переменная в запросе, а затем 1 переменная, переданная массивом, поэтому я не могу получить запрос для успеха.Ниже представлен контроллер, которому отправляется форма.Спасибо за вашу помощь.

IssueController.php

  public function store(Request $request)
{
    //Validate Input
    $request->validate([
       'company_id' => 'string|max:255',
       'message' => 'required|string|max:255' 
    ]);

    //Once the form input has passed validation add input to the database

    $issueData = new Issue();
    $issueData->id = "R" . Uuid::generate(4)->string;
    $issueData->company_id = $request->company_id;
    $issueData->first_name = Auth::user()->first_name;
    $issueData->last_name = Auth::user()->last_name;
    $issueData->user_id = Auth::user()->id;
    $issueData->message = $request->message;


    //Create MySQL event to increment escalation level
    //Event will be named equal to the new page 'R' ID
    //That has just been generated.

    DB::statement('CREATE EVENT test ON SCHEDULE EVERY 5 MINUTE DO UPDATE issues SET escalation_level = escalation_level + 1 WHERE id = :issue_id', array('issue_id' => $issueData->id));

    $issueData->save();

    return redirect('home')->with('status', ['Message sent successfully.', 
        'You can monitor the status of your message from Check Status section']);

}

1 Ответ

0 голосов
/ 07 июня 2019

Я нашел проблему с помощью сообщения SO здесь . Некоторые запросы в Laravel требуют использования неподготовленных операторов. Я смог решить проблемы, используя DB :: unprepared, как это:

        DB::unprepared('CREATE EVENT event_name ON SCHEDULE EVERY 5 MINUTE DO UPDATE issues SET escalation_level = escalation_level + 1 WHERE id = ' . '/'' . $issueData->id . '/'');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...