CActiveRecord查询难题求教

问题是这样的,有两个表t和template,使用join查询数据是查出来了但是有个很大的问题,CActiveRecord 中有什么属性是完全按照表结构来的(就是根据CActiveRecordMetaData中记录的表结构),但是我要的结果分别是这两张表的一部分字段,结构就是主表t中有的字段值都正常,而从template表中查出的字段全部都被忽略掉了!这个有什么办法解决吗?

PS:个人觉得CActiveRecord这种完全与表严格对应的方式在这种情况下很不方便,CActiveRecordMetaData是否能做的灵活点,比如能通过model来手动提供?这样也能够提高效率,还有CActiveRecord的所有find方法是否能提供一个开关来直接返回数组而不是CActiveRecord对象…

CActiveRecord,就是这么设计的,我觉得不可能直接返回数组。可能我看的还是不够深,越看越觉得CActiveRecord写的有点别扭,真的有点不习惯。慢慢研究了

使用AR的CDbCriteria中的select属性也许应该可以解决掉构建你自己想要的字段;

这就是ORM了。你需要数组,也许DAO是个不错的选择(还能提高效率呢)!

饿~多些各位的回复,看来只能使用pdo来操作了,希望yii能在这方面进行改进,比如使用灵活度更高的ORM方式,现在的ActiveRecord方式对于开发复杂的应用在灵活度和效率方面都不太适合。

如果你需要在t的AR里存放template里的a, b, c列,那么只要在t里声明public $a; public $b; public $c.

不过你这种用法不太符合AR的设计初衷。最好还是用DAO。

多谢qiang大,可是我用这个方法在t的model中设置了template中对应的列名,然后用findAll()方法查出来的结果还是没有template中的字段呢…