Cakephp 3.6.14: Найти, обновить и сохранить записи - PullRequest
0 голосов
/ 09 января 2019

У меня есть 3 таблицы: Tasks [id, name, task_type_id], TaskTypes [id, name], TaskElements [id, name, description, task_type_id, Task_id]. Я хочу в TasksController (add и edit функциях) найти все task_element с task_type_id != null и Task_id == null, а затем создать новые строки с обновленным полем task_id.

Это то, что я пробовал до сих пор:

public function edit($id = null)
{
    $task = $this->Tasks->get($id, [
        'contain' => []
    ]);
    if ($this->request->is(['patch', 'post', 'put'])) {
        $task = $this->Tasks->patchEntity($task, $this->request->getData());

        //if has specific task type then copy task elements
        if ($this->request->getData('task_type_id') != null){

            $taskElements = TableRegistry::get('TaskElements')->find('all', [
                    'conditions' => ['TaskElements.task_type_id == '=> $this->request->getData('task_type_id')],
                    'limit' => 100
                ])->ToArray();
            debug($taskElements);
            //foreach ($taskEl as $tel) {
            //    $tel->task_id = $id;
            //    $this->Tasks->TaskElements->create();
            //    $this->Tasks->TaskElements->save($tel);
            //}

        }

        if ($this->Tasks->save($task)) {
            $this->Flash->success(__('The task has been saved.'));

            //return $this->redirect(['action' => 'index']);
        }
        $this->Flash->error(__('The task could not be saved. Please, try again.'));
    }

Но conditions не верны и их нужно обновлять. И, возможно, в моем коде больше ошибок, с которыми я еще не сталкивался.

Это ошибка, которую я получаю:

Синтаксическая ошибка или нарушение прав доступа: 1064 В вашем синтаксисе SQL есть ошибка; проверьте руководство, соответствующее вашей версии сервера MariaDB, для правильного синтаксиса для использования рядом с '= 1 LIMIT 100' в строке 1

ВЫБРАТЬ TaskElements.id AS TaskElements__id, TaskElements.name AS TaskElements__name, TaskElements.description AS TaskElements__description, TaskElements.task_type_id AS TaskElements__task_type_id, TaskElements.Task_id AS TaskElements__Task_id FROM task_elements TaskElements WHERE Тип_экземпляров_экземпляров_экземпляров_экземпляров TaskElements_tas ==: c0 LIMIT 100

Ответы [ 2 ]

0 голосов
/ 09 января 2019

Не используйте так:

TaskElements.task_type_id == '=>

Используйте вот так:

TaskElements.task_type_id'=>

Как => уже означает ==, потому что мы уже ставим это в условия.

Отметьте галочкой, если это поможет.

0 голосов
/ 09 января 2019

Ваш SQL-запрос должен иметь "=" вместо "==".

ВЫБРАТЬ TaskElements.id AS TaskElements__id, TaskElements.name AS TaskElements__name, TaskElements.description AS TaskElements__description, TaskElements.task_type_id AS TaskElements__task_type_id, TaskElements.Task_id AS TaskElements__Task_id FROM task_elements TaskElements ГДЕ TaskElements.task_type_id ==: c0 LIMIT 100

Вы можете обновить, как показано ниже:

$taskElements = TableRegistry::get('TaskElements')->find('all', [
                    'conditions' => ['TaskElements.task_type_id = '=> $this->request->getData('task_type_id')],
                    'limit' => 100
                ])->ToArray();
...