当控制器/动作调用'controller / action'时,cakephp将动作名称作为查询传递

时间:2011-07-08 11:04:29

标签: cakephp-1.3

我在这两个控制器'用户'和'客户'中遇到问题,他们的模型有多对一的关系。

在两个控制器中我有一个名为assignToAccountManager()的函数 当我从users / assignToAccountManager调用customers / assignToAccountManager时,我收到此错误:

警告(512): SQL错误:1064:您的SQL语法出错;检查与MySQL服务器版本对应的手册,以便在第1行的“assignToAccountManager”附近使用正确的语法[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 :(得分:0)

有一个动作调用另一个控制器上的另一个动作通常被认为是不好的形式。

Customer控制器中的assignToAccountManager应该重新定位一个模型;客户模型可能效果最好,因为这是用户控制器访问它的方式。

为了使Customer模型中的函数不必执行loadModel,您应该在Customer和AccountManager之间建立关系。根据您的代码,Customer belongsTo 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,就像account_manager表中的id字段一样。