0

我的控制器在这里似乎有问题:

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

实际上,我想更新名为“角色”的表列中的“角色”字段并将其设置为“管理员”。

你能想象出什么问题吗?我已经看到很多教程都成功地使用了它,但显然我在这里遗漏了一些东西。

PS:我是 cakephp 新手 :D

先感谢您!

4

3 回答 3

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');
于 2013-05-09T20:44:01.917 回答
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.'));
            }
于 2013-11-04T21:44:13.270 回答
0

看到你的代码,你User从 AdminsController 调用。

除非你做一个

var $uses = array('Admin', 'User');

在控制器开始时(不要这样做,它会影响性能),它不会识别您的用户模型。默认情况下,AdminsController 只能直接访问(即使用 $this->Admin)到 Admin 模型,FoosController 到 Foo 模型(使用 $this->Foo)等。

您可以按照@Dave 在他的回答中指出的那样做,但请记住,如果 Admin 与 User 模型相关(与 hasMany、belongsTo 或任何其他关联),那么您可以像这样从 AdminsController 访问 User 模型

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

如果你有一个与 User 关联的 Foo 模型,例如,应用相同的连接规则,并且在你的 AdminsController 中你可以做

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

(很多这样的连接会影响性能)。

于 2013-05-09T20:48:05.730 回答