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

あなたのコード、UserAdminsController からの呼び出しを見ました。

あなたがしない限り

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

コントローラーの開始時に(ただし、パフォーマンスに影響します)、ユーザーモデルを認識しません。デフォルトでは、AdminsController は Admin モデルへの直接アクセス (つまり、$this->Admin を使用) のみ、FoosController は Foo モデル ($this->Foo を使用) などにのみアクセスできます。

@Daveが彼の回答で示しているように行うことができますが、管理者がユーザーモデルと(hasMany、belongsTo、またはその他の関連付けで)関連付けられている場合、次のようにAdminsControllerからユーザーモデルにアクセスできることに注意してください

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

たとえば、User に関連付けられた Foo モデルがある場合、同じ連結ルールが適用され、AdminsController で次のことができます。

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

(このような多くの連結はパフォーマンスに影響します)。

于 2013-05-09T20:48:05.730 に答える
0

loadModel は私のために働きます! 最初は 2 つの異なるモデルを呼び出すモデル関数を使用しようとしましたが、代わりにモデルごとにモデル関数を作成し、単一のコントローラーで関数を呼び出しました。

            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 に答える