我有一些问题,我使用条件来自定义数字列查询
$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**}
请帮帮我。 感谢所有
答案 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
{
---
}