为Mongo Collection创建动态属性 - YII框架

时间:2014-01-11 07:13:11

标签: yii yii-extensions

我正在尝试为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."

1 个答案:

答案 0 :(得分:0)

您不需要&#34; attributeLabels()&#34;在这种情况下的方法,因为每个属性应该有一个相关的值。如果您没有设置该方法,Yii将使用属性名称作为标签本身。