我正在尝试为Mongo Collection创建动态模型类并在Cgridview中填充数据(使用YIIMongodbsuite扩展)
从MySQL DB获取列:
$sql="SELECT name FROM CRM_Field Where crm_base_contact_id = ".$base;
$names =Yii::app()->db->createCommand($sql)->query()-> readAll();
在视图中访问模型:
$cc = new ContactCollection($names);// Passing dynamic column names to Model
$criteria = new EMongoCriteria;
$criteria->crm_base_contact_id('==', $base);
$cc->setDbCriteria($criteria);
CgridView代码:
<?php $this->widget('zii.widgets.grid.CGridView', array(
'id' =>'BCImported-grid',
'dataProvider' => $cc->search(false),
'columns' => $names,
)); ?>
ContactCollection模型:
<?php
class ContactCollection extends EMongoDocument
{
public $dyn_fields;
public function __construct ($names) {
$this->dyn_fields = $names;
}
public function getCollectionName()
{
return 'cartoons';
}
/**
* @return array validation rules for model attributes.
*/
public function rules()
{
$allMembers = implode(', ', array_keys($this->dyn_fields));
return array(
array($allMembers, 'required'),
);
}
public function attributeLabels()
{
return $this->dyn_fields;
}
}
我收到此错误" Property "ContactCollection.0" is not defined."
答案 0 :(得分:0)
您不需要&#34; attributeLabels()&#34;在这种情况下的方法,因为每个属性应该有一个相关的值。如果您没有设置该方法,Yii将使用属性名称作为标签本身。