我正在尝试在模型中动态设置一个字段,因此它将在我的任何读取操作中返回。我查看了虚拟字段,但它们并不完全正确,因为它们基本上执行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()之间,现在正在躲避我。
另外,由于我正在以不同的方式阅读我的用户列表(有时是分页,或者一次只有一个用户),这不是我想在控制器中设置的内容。我希望该属性在读取时只显示在模型中。
答案 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();