我有一个名为vat_free
的字段的表。所以我的模型是用属性$vat_free
创建的。其值可以是 0 或 1 。
我希望我的观点显示否或是,而不是 0 或 1 。我可以创建一个像getVatFree()
这样的getter,但它似乎是一个混乱的解决方案,因为那时我会在同一个字段中有两个属性,即使它可以用于不同的目的。
那么我怎样才能只使用原始属性$vat_free
?我不能修改它的吸气剂吗?
答案 0 :(得分:4)
创建方法
public function getVatFreeString(){
return $this->vat_free ? 'Yes':'No';
}
是正确的解决方案,它并不凌乱。
答案 1 :(得分:3)
你可以这样做
$vat_free = YES or NO
但在保存此对象之前,您将使用beforeSave()
方法覆盖对象类,如下所示:
beforeSave(){
if($this->vat_free = YES){
$this->vat_free = 1
}else{
$this->vat_free = 0;
}
}
并覆盖afterFind()
以执行相反的操作(对于beforeSave())translate。但这甚至是凌乱的,如果你进行批量保存或检索,它将无法工作。
我看到了2个解决方案。
getVatFree()
,这是OOP封装的全部目的。 答案 2 :(得分:2)
在您的模型中,创建一个仅用于显示目的的新字段。
class User extends CActiveRecord
{
public $displayVatFreeFlag;
public function rules() { ... }
public function afterFind()
{
$this->displayVatFreeFlag = ($this->vat_free ? 'Yes':'No');
}
}
然后,在您的字段中,正常显示该字段。
Vat free : <?php echo $model->displayVatFreeFlag; ?>