2013-05-09 216 views
0

我控制器似乎是車在這裏:CakePHP的:調用一個成員函數集()在一個非對象錯誤

public function addAdmin($id) { 
    $this->User->id = $id; 
    $this->User->set('role','admin'); 
    $this->User->save(); 
} 

所以它拋出我的錯誤Call to a member function set() on a non-object

其實,我想在名爲'role'的表列中更新字段'role',並將其設置爲'admin'。

你能想象有什麼問題嗎?我見過很多教程使用這個成功,但在這裏顯然我失去了一些東西。

PS:我是一個新手的CakePHP:d

預先感謝您!

+0

'addAdmin'操作在UsersController.php中? – Nunser 2013-05-09 20:36:12

+0

你能發佈更多的代碼嗎?優選整個控制器。 – pixelistik 2013-05-09 20:39:30

+0

這是我的整個AdminsController:http:// pastie。org/private/ae1d1y7d9rfx8pmwyuaaa – 2013-05-09 20:43:17

回答

2

User模型未加載。

嘗試加載它:

public function addAdmin($id) { 
    $this->loadModel('User'); // here 
    $this->User->id = $id; 
    $this->User->set('role','admin'); 
    $this->User->save(); 
} 

您不必如果您在型號的控制器是加載模型 - 但在這種情況下,你在不同的控制器,所以你或者需要加載模型(如上所述),或者通過已經加載的關聯模型來訪問它。

所以,作爲一個例子,如果你在RolesController的時候,你可以訪問相關的「用戶」模型,而無需專門加載:

$this->Role->User->set('role', 'admin'); 
+0

也嘗試過在我的代碼中,但這不起作用:( 我的數據庫中的字段保持不變... – 2013-05-09 20:52:28

+0

你還在收到錯誤嗎?如果沒有,那麼你問的是新問題 – Dave 2013-05-09 20:56:35

0

看你的代碼,你從AdminsController調用User

除非你做一個

var $uses = array('Admin', 'User'); 
在控制器的beggining

(不這樣做,雖然,它會影響性能),它不會承認你的用戶模型。默認情況下,AdminsController只能直接訪問(即使用$ this-> Admin)到Admin模型,FoosController到Foo模型(使用$ this-> Foo)等。

您可以像@Dave那樣在他的答案,但有一點,如果管理員是相關的(用的hasMany,屬於關聯,或任何其他協會)與用戶的模式,那麼你可以從AdminsController訪問用戶模型,這樣

$this->Admin->User->set(1,2); 

如果你有一個與用戶關聯的Foo模型,例如,應用相同的級聯規則,並且在您的AdminsController中可以執行

$this->Admin->User->Foo('find') 

(像這樣的很多連接會影響性能)。

+0

試過,它不工作:( – 2013-05-09 20:52:00

+0

取決於你的模型是如何相關的,是嗎?錯誤是否至少改變? – Nunser 2013-05-09 20:53:13

+0

是啊,現在有一個致命的錯誤:調用成員函數集)在新行 – 2013-05-09 21:01:23

0

loadModel適合我!我最初嘗試使用調用兩個不同模型的模型函數,但是我爲每個模型創建了一個模型函數,然後在單個控制器中調用函數。

  if ($this->Transaction->saveTrans(PARAMETERS)){ 
      $this->Session->setFlash(__('Transaction Success!')); 
      $this->loadModel('Creditcard'); 
      if ($this->Creditcard->saveCC(PARAMETERS)){ 
       $this->Session->setFlash(__('Credit Card Success!')); 
      } else { 
       $this->Session->setFlash(__('Unsuccessful: The Credit Card was approved but could not be saved. Please try again.')); 
      } 
相關問題