2013-05-09 224 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.')); 
      } 
相关问题