没有找查到相关的资料,还请指点指点。
为了解决相同的业务,但不同的项目表结构会不同的情况。
没有找查到相关的资料,还请指点指点。
为了解决相同的业务,但不同的项目表结构会不同的情况。
如果你在select时定义了别名,那么你在model类里声明一个该别名的变量就可以了。
1.在upate,delete,insert时,有没有什么方法也可以应用别名呢?
2.以下的情况,我没有写select语句,有没有什么方法可以实现在程序中只操作别名来获取数据呢?
在通过modelName::model()->findAll()获取所有的记录后,就可以通过modelName->字段别名,来取得相应的字段值。
在这样的情况下我没有写selset语句,不知道能否实现别名操作。
3.有没有什么映射机制呢?比如,就只在model中写明别名与字段的映射关系就可以在语句中操作别名了。
AR 本身没提供字段名映射机制。你可以考虑自己实现一下这个功能?
谢谢,如果自己实现了,一定发给强哥。
只解决了不用写sql语句的解决办法,还请强哥指点一下,还有什么情况要考虑进来。
解决方法如下:
class DreamBaseAR extends CActiveRecord
{
/**
* 字段别名数组,
* key:字段别名;
* value:字段名
*
* @var array
*/
public $_fieldsArias = array();
public function __get($name) {
if (isset($this->_fieldsArias[$name])) {
return parent::__get($this->_fieldsArias[$name]);
}
else {
return parent::__get($name);
}
}
}
class TestAr extends DreamBaseAR
{
/**
* 字段别名
*
* @var array
*/
public $_fieldsArias = array(
'uid' => 'userid',
'uname' => 'username',
'ustate' => 'userstate',
'uid' => 'userid',
);
public function tableName() {
return 'user';
}
}
在取字段值时,就可以通过别名来获取字段的值了,代码片段如下:
在controller中:
$testAr = TestAr::model()->findAll();
foreach ( $testAr as $ar) {
echo "<p>字段userid的值:{$ar->uid}</p>";
}
如有不当地方,还请指正
这样是可以的,还有setter也需要重写。
强哥回复好快呀,还没睡呢?
现把__set方法补上!
代码如下:
class DreamBaseAR extends CActiveRecord
{
/**
* 字段别名数组,
* key:字段别名;
* value:字段名
*
* @var array
*/
public $_fieldsArias = array();
public function __get($name) {
if (isset($this->_fieldsArias[$name])) {
return parent::__get($this->_fieldsArias[$name]);
}
else {
return parent::__get($name);
}
}
public function __set($name,$value)
{
if (isset($this->_fieldsArias[$name])) {
parent::__set($this->_fieldsArias[$name],$value);
}
else {
parent::__set($name,$value);
}
}
}
class TestAr extends DreamBaseAR
{
/**
* 字段别名
*
* @var array
*/
public $_fieldsArias = array(
'uid' => 'userid',
'uname' => 'username',
'ustate' => 'userstate',
'uid' => 'userid',
);
public function tableName() {
return 'user';
}
}
在取字段值时,就可以通过别名来获取字段的值了,代码片段如下:
在controller中:
$testAr = TestAr::model()->findAll();
foreach ( $testAr as $ar) {
echo "<p>字段userid的值:{$ar->uid}</p>";
}