2012-05-02 7 views
0

モデル内でフィールドを設定しようとしているので、読み込みアクションで自分のフィールドが返されます。私は仮想フィールドを調べましたが、基本的にSQLクエリを実行するので、あまり適切ではありません。CakePHPでモデル内のフィールドをプログラムで設定する

この例では、ユーザーがアカウントを有効にしているかどうかを確認するために、単純なチェックに基づいて値を返そうとしています。私のモデルの中では、私はこの機能を実行したい:

public function status() { 
    if ($this->field('password')) { 
     return = 'active'; 
    } else if ($this->Ticket->field('id')) { 
     return = 'pending'; 
    } else { 
     return = 'inactive'; 
    } 
} 

意図は$ユーザー[「ユーザー」] [「状態」]を経由して私の見解ではそれにアクセスすることですので、私は、CSSスタイルを適用することができ、など、その結果に基づいています。

しかし、$ this ['User'] ['status'] = status()の設定の間に、私は今、私を逃しています。

また、私はユーザのリストをさまざまな方法で(一度にページ設定や1人のユーザで)表示しているので、これはコントローラで設定したいものではありません。私はそのプロパティが読み込まれるとモデルに単純に表示されるようにします。あなたは状態関数を呼び出すしたい場所

答えて

2

どのようにあなたのロジックをやってafterFindコールバックで結果にそれを追加するでしょうか?うーん...何らかの理由でこれは私にエラーを与える

//User model 
public function afterFind($results) { 

    if ($this->field('password')) { 
     $results[$this->alias]['status'] = 'active'; 

    } else if ($this->Ticket->field('id')) { 
     $results[$this->alias]['status'] = 'pending'; 

    } else { 
     $results[$this->alias]['status'] = 'inactive'; 
    } 
} 
+0

:致命的なエラー:33554432バイトの許可メモリサイズが使い果たさは(しようとしたこのような何か - (あなたがfind()を行った後、それの名前ごとがトリガされています) 523800バイトを割り当てます) –

+1

再帰的な設定が高すぎるような音がします。あなたのAppModelで 'public $ recursive = -1;'を設定し、それを必要とするときにのみ変更することをお勧めします(再帰的な使用は良い考えではないと思いますが、代わりにContainableを使用する必要があります) – Dave

0

コールバックでこれを試してみてください:

$this->data[$this->alias]['status'] = $this->status(); 
関連する問題