以编程方式在CakePHP中设置模型内的字段

时间:2012-05-02 13:40:16

标签: cakephp properties model on-the-fly

我正在尝试在模型中动态设置一个字段,因此它将在我的任何读取操作中返回。我查看了虚拟字段,但它们并不完全正确,因为它们基本上执行SQL查询。

在此示例中,我尝试根据简单检查返回一个值,以查看用户是否已激活其帐户。在我的模型中,我想运行这个函数:

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

目的是通过$ user ['User'] ['status']在我的视图中访问它,因此我可以根据结果应用CSS样式等。

但在设置$ this ['User'] ['status'] = status()之间,现在正在躲避我。

另外,由于我正在以不同的方式阅读我的用户列表(有时是分页,或者一次只有一个用户),这不是我想在控制器中设置的内容。我希望该属性在读取时只显示在模型中。

2 个答案:

答案 0 :(得分:2)

如何处理逻辑并将其附加到afterFind回调中的结果中? (在执行find()之后触发它的名称)这样的事情:

//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';
    }
}

答案 1 :(得分:0)

在您想要调用状态函数的回调中尝试此操作:

$this->data[$this->alias]['status'] = $this->status();