Yii:添加自定义字段
是否有一种向模型添加自定义字段的简单方法?假设我有一个表用户,有3个字段:id、姓名和姓氏。我想要这个:Yii:添加自定义字段,yii,custom-attributes,Yii,Custom Attributes,是否有一种向模型添加自定义字段的简单方法?假设我有一个表用户,有3个字段:id、姓名和姓氏。我想要这个: $user = User::model()->findByPk(1); $echo $user->fullName; // echoes name and surname 请注意:我想通过sql添加这个自定义字段,类似于smth $c = new CDbCriteria(); $c->select = 'CONCAT("user".name, "user".surname
$user = User::model()->findByPk(1);
$echo $user->fullName; // echoes name and surname
请注意:我想通过sql添加这个自定义字段,类似于smth
$c = new CDbCriteria();
$c->select = 'CONCAT("user".name, "user".surname) as fullName';
$user = User::model()->find($c);
问题是未设置fullName属性
UPD:
下面是一些更棘手问题的代码——来自另一个表的自定义字段。这是如何做到的:
$model = Application::model();
$model->getMetaData()->columns = array_merge($model->getMetaData()->columns, array('fullName' => 'CONCAT("u".name, "u".surname)'));
$c = new CDbCriteria();
$c->select = 'CONCAT("u".name, "u".surname) as fullName';
$c->join = ' left join "user" "u" on "t".responsible_manager_id = "u".id';
$model->getDbCriteria()->mergeWith($c);
foreach ($model->findAll() as $o) {
echo '<pre>';
print_r($o->fullName);
echo '</pre>';
}
可以向用户类添加函数:
public function getMetaData(){
$data = parent::getMetaData();
$data->columns['fullName'] = array('name' => 'fullName');
return $data;
}
这将返回全名,就像它是数据库中的属性一样。这比在模型中向SQL中添加计算列容易得多。
因此,不推荐使用Yii的_-get方法调用该函数,就像调用常规列一样:$user->fullName当您编写类似$user->fullName的内容时,fullName可能出于一些不同的原因成为$user的一部分。它可以是用户活动记录的成员变量,可以是用户表中的一列,可以是用户拥有的关系的名称,可以是名为getFullName的成员函数。我想就这些了,按照检查的顺序。将$user->fullName转换为$user->getFullName是CComponent的一部分,CComponent是所有Yii类的基类。对于ActiveRecord,首先要做额外的属性/关系检查:不过,这是一个相当骇客的解决方案。。。我不认为手动更改元数据是一种好的方式。
public function getMetaData(){
$data = parent::getMetaData();
$data->columns['fullName'] = array('name' => 'fullName');
return $data;
}