2011-07-08 50 views
1

我在這兩個控制器的'Users'和'Customers'有問題,他們的模型有多對一的關係。cakephp傳遞操作名稱作爲查詢,當從controllerB/actionB調用'controllerA/action'

在兩個控制器我有一個功能叫做assignToAccountManager()

當我打電話的客戶/ assignToAccountManager從用戶/ assignToAccountManager我收到此錯誤:

警告(512): SQL錯誤:1064:您在您的SQL語法中有錯誤;檢查對應於你的MySQL服務器版本正確的語法在線路附近使用「assignToAccountManager」 1 CORE \蛋糕\庫\型號\數據源\ dbo_source.php,線525]

查詢手冊:assignToAccountManager

這是我的用戶/ 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); 

     } 
    } 
+0

根據我的意見,U應該把「assignToAccountManager」放在app_controller中,然後你可以很容易地在兩個控制器中使用這個函數。 – chetanspeed511987

回答

0

有一個動作調用另一個控制器上的另一個動作通常被認爲是不好的形式。

客戶控制器中的assignToAccountManager應重新定位模型;客戶模型可能效果最好,因爲這是您的用戶控制器訪問它的方式。

爲了使Customer模型中的函數不必執行loadModel,您應該在Customer和AccountManager之間建立關係。根據你的代碼,Customer屬於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字段表。