cakephp передает имя действия как запрос, когда 'controllerA / action' вызывается из controllerB / actionB - PullRequest
1 голос
/ 08 июля 2011

У меня проблема в этих двух контроллерах «Пользователи» и «Клиенты», и их модели имеют отношение многих к одному.

В обоих контроллерах у меня есть одна функция assignToAccountManager (), когда я вызываю клиентов /assignToAccountManager from users / assignToAccountManager Я получаю эту ошибку:

Предупреждение (512): Ошибка SQL: 1064: в синтаксисе SQL имеется ошибка;проверьте руководство, соответствующее вашей версии сервера MySQL, чтобы узнать правильный синтаксис для использования рядом с 'assignToAccountManager' в строке 1 [CORE \ cake \ libs \ model \ datasources \ dbo_source.php, строка 525]

Запрос: assignToAccountManager

это моя функция users / assignToAccountManager ():

public function assignToAccountManager($userId=""){

        $userId = $userId;
        $userId = 1235;
        $this->User->id = $userId;
        $customerId = $this->User->field('customer_id');
        $this->User->Customer->id = $customerId;
        if($this->User->Customer->field('account_manager_id')){
            $this->User->Customer->assignToAccountManager($customerId);                                             
        }
        else{

        }
    }

, а это моя функция assignToaccountManger от контроллера клиентов

public function assignToAccountManager($customerId){
        if($customerId = ''){
            return false;
        }
        else{
            $this->loadModel('AccountManager');
            $accountManagerId = array_rand($this->AccountManager->find('list', array(
                    'fields'=>array('id')
                )),1);

            $this->Customer->id = $customerId;
            $this->Customer->saveField('account_manager_id', (string)$accountManagerId);

        }
    }

1 Ответ

0 голосов
/ 22 июля 2011

Наличие вызова действия другого действия на другом контроллере обычно считается плохой формой.

assignToAccountManager в вашем контроллере Customer должен быть перемещен в модель;модель Customer, вероятно, будет работать лучше, так как ваш пользовательский контроллер получает к ней доступ.

Чтобы функция в модели Customer не выполняла loadModel, вы должны установить связь междуКлиент и AccountManager.Основываясь на вашем коде, клиент принадлежит к AccountManager соответствующие отношения.После этого код модели будет изменен на:

public function assignToAccountManager($customerId){
    if($customerId = ''){
        return false;
    }
    else{
        $accountManagerId = array_rand($this->AccountManager->find('list', array(
                'fields'=>array('id')
            )),1);

        $this->id = $customerId;
        $this->saveField('account_manager_id', $accountManagerId);

    }
}

Вам не нужно приводить $ accountManagerId к строке, так как все поля * _id должны быть int или bigint, так же как поле id натаблица account_manager.

...