从findAll函数Yii自定义get列

时间:2014-05-19 03:30:20

标签: php yii

我有一些问题,我使用条件来自定义数字列查询

 $criteria=new CDbCriteria();
            $criteria->select =array('CompanyName', 'CompanyCountCoupon','CompanyDes', 'CompanyLogo');
            $models = Company::model()->findAll($criteria);

我把它放到数组并回显结果

    $rows = array();
        foreach($models as $i=>$model1) {
            $rows[$i] = $model1->attributes;
        }
    echo  CJSON::encode($rows)

我的问题是结果包含表的所有属性,而属性不在criteria-> select中将设置= null

   {"CompanyName":"abc","CompanyCountCoupon":"0","CompanyDes":"Hello","CompanyLogo":"\/upload\/company\/abc.jpg",**"CompanyID":null,"CompanyWebSite":null,"CompanyAdrress1":null,"CompanyAdrress2":null,"CompanyPhone1":null,"CompanyPhone2":null**}

请帮帮我。 感谢所有

3 个答案:

答案 0 :(得分:1)

如果您使用findAll()(使用ActiveRecord),您将无法控制该部分,可以选择自定义查询

$results = Yii::app()->db->createCommand()
    ->select('CompanyName ,CompanyCountCoupon ,CompanyDes ,CompanyLogo')
    ->from('company')
    //->where() // where part
    ->queryAll();

echo  CJSON::encode($results);

现在已经很好地进行了JSON编码,并且比常规的ActiveRecord

快得多

答案 1 :(得分:0)

使用getAttributes()

示例

 $rows = Company::model()->getAttributes(array('CompanyName','CompanyCountCoupon','CompanyDes', 'CompanyLogo')); 
 echo  CJSON::encode($rows);

答案 2 :(得分:0)

这是正确的行为。

您要求提供特定列,因此正确提供此列。

回想一下,属性是模型的一部分,而不是查询。

$model = Company::model()->findByPK();
print_r($model);
 ...
/* Company points to the TABLE. not the query */
class Company extends CActiveRecord
{
---
}