2014-01-23 25 views
1

我有以下表格,如何從兩個表中的數據CGridView Yii中

CREATE TABLE `m_user`(
    `user_id` INT AUTO_INCREMENT PRIMARY KEY, 
    `user_name` VARCHAR(50) NOT NULL, 
    `pwd` VARCHAR(50) NOT NULL, 
    `type` VARCHAR(25) NOT NULL, 
    `actv_sw` VARCHAR(2) NOT NULL, 
    `cre8_ts` TIMESTAMP NOT NULL, 
    `lst_updt_ts` TIMESTAMP NOT NULL 
); 

CREATE TABLE `m_expense`(
    `expense_id` INT AUTO_INCREMENT PRIMARY KEY, 
    `expense_name` VARCHAR(100) NOT NULL, 
    `actv_sw` VARCHAR(2) NOT NULL, 
    `added_dt` DATE NOT NULL, 
    `cre8_ts` TIMESTAMP NOT NULL, 
    `cre8_by` INT NOT NULL, 
    `lst_updt_ts` TIMESTAMP, 
    `lst_updt_by` INT, 
    CONSTRAINT `m_expense_fk1` FOREIGN KEY (`cre8_by`) 
     REFERENCES `m_user` (`user_id`), 
    CONSTRAINT `m_expense_fk2` FOREIGN KEY (`lst_updt_by`) 
     REFERENCES `m_user` (`user_id`) 
); 

和CGridview定義如下,

$this->widget('zii.widgets.grid.CGridView', array(
    'id' => 'expense-grid', 
    'emptyText' => 'No data Found', 
    'dataProvider' => Expense::model()->search(), 
    'cssFile' => Yii::app()->theme->baseUrl . '/css/gridView.css', 
    'enablePagination' => true, 
    'enableSorting' => true, 
    'pagerCssClass' => 'pager', 
    'columns' => array(
     //styling default buttons 
     array(
      'header' => 'Update', 
      'class' => 'CButtonColumn', 
      'template' => '{update}', 
      'updateButtonImageUrl' => Yii::app()->theme->baseUrl . '/images/' . 'gr-update.png' 
     ), 
     array(
      'name' => 'expense_id', 
      'header' => 'Id', 
      'value' => '$data->expense_id', 
      'htmlOptions' => array('style' => 'min-width:20px;') 
     ), 
     array(
      'name' => 'expense_name', 
      'header' => 'Expense Name', 
      'value' => '$data->expense_name', 
      'htmlOptions' => array('style' => 'min-width:150px;') 
     ), 
     array(
      'name' => 'added_dt', 
      'header' => 'Added Date', 
      'value' => '$data->added_dt', 
      'htmlOptions' => array('style' => 'min-width:100px;') 
     ), 
     array(
      'name' => 'actv_sw', 
      'header' => 'Active', 
      'filter' => array('Y' => 'Yes', 'N' => 'No'), 
      'value' => '($data->actv_sw=="Y")?("Yes"):("No")', 
      'htmlOptions' => array('style' => 'min-width:50px;') 
     ), 
     array(
      'name' => 'cre8_ts', 
      'header' => 'Created Time', 
      'value' => '$data->cre8_ts', 
      'htmlOptions' => array('style' => 'min-width:100px;') 
     ), 
     array(
      'name' => 'cre8_by', 
      'header' => 'Created By', 
      'value' => '$data->user_name', 
      'htmlOptions' => array('style' => 'min-width:50px;') 
     ), 
     array(
      'name' => 'lst_updt_ts', 
      'header' => 'Updated Time', 
      'value' => '$data->lst_updt_ts', 
      'htmlOptions' => array('style' => 'min-width:100px;') 
     ), 
     array(
      'name' => 'lst_updt_by', 
      'header' => 'Updated By', 
      'value' => '$data->user_name', 
      'htmlOptions' => array('style' => 'min-width:50px;') 
     ) 
    ) 
     ) 
); 

模型定義如下,

class Expense extends CActiveRecord { 

    /** 
    * @return string the associated database table name 
    */ 
    public function tableName() { 
     return 'm_expense'; 
    } 

    /** 
    * @return array validation rules for model attributes. 
    */ 
    public function rules() { 
     return array(
      array('expense_name, actv_sw, added_dt, cre8_ts, cre8_by', 'required'), 
      array('cre8_by, lst_updt_by', 'numerical', 'integerOnly' => true), 
      array('expense_name', 'length', 'max' => 100), 
      array('actv_sw', 'length', 'max' => 2), 
      array('lst_updt_ts', 'safe'), 
      array('expense_id, expense_name, actv_sw, added_dt, cre8_ts, cre8_by, lst_updt_ts, lst_updt_by', 'safe', 'on' => 'search') 
     ); 
    } 

    /** 
    * @return array relational rules. 
    */ 
    public function relations() { 
     return array(
      'cre8By' => array(self::BELONGS_TO, 'MUser', 'cre8_by'), 
      'lstUpdtBy' => array(self::BELONGS_TO, 'MUser', 'lst_updt_by'), 
      'tExpensesPayments' => array(self::HAS_MANY, 'TExpensesPayment', 'expense_id'), 
     ); 
    } 

    /** 
    * @return array customized attribute labels (name=>label) 
    */ 
    public function attributeLabels() { 
     return array(
      'expense_id' => 'Expense', 
      'expense_name' => 'Expense Name', 
      'actv_sw' => 'Active Status', 
      'added_dt' => 'Added Date', 
      'cre8_ts' => 'Cre8 Ts', 
      'cre8_by' => 'Cre8 By', 
      'lst_updt_ts' => 'Lst Updt Ts', 
      'lst_updt_by' => 'Lst Updt By', 
     ); 
    } 

    /** 
    * Retrieves a list of models based on the current search/filter conditions. 
    * 
    * @return CActiveDataProvider the data provider that can return the models 
    * based on the search/filter conditions. 
    */ 
    public function search() { 
     $criteria = new CDbCriteria; 

     /* $criteria->compare('expense_id', $this->expense_id); 
      $criteria->compare('expense_name', $this->expense_name, true); 
      $criteria->compare('actv_sw', $this->actv_sw, true); 
      $criteria->compare('added_dt', $this->added_dt, true); 
      $criteria->compare('cre8_ts', $this->cre8_ts, true); 
      $criteria->compare('cre8_by', $this->cre8_by); 
      $criteria->compare('lst_updt_ts', $this->lst_updt_ts, true); 
      $criteria->compare('lst_updt_by', $this->lst_updt_by); */ 

     return new CActiveDataProvider('Expense', array(
      'criteria' => array(
       'with' => array('cre8By' => array('joinType' => 'LEFT JOIN')) 
      ) 
     )); 
    } 

    /** 
    * Returns the static model of the specified AR class. 
    * Please note that you should have this exact method in all your CActiveRecord descendants! 
    * @param string $className active record class name. 
    * @return Expense the static model class 
    */ 
    public static function model($className = __CLASS__) { 
     return parent::model($className); 
    } 

} 

其實我想顯示的用戶名,而不是cre8_by & lst_updt_by列我n CGridView,幫我解決這個問題。在此先感謝...............

回答

1

更換 'value' => '$data->cre8_by',通過

'value' => '$data->cre8By->user_name', 

然後

通過

'value' => '$data->lstUpdtBy->user_name', 

你必須更換'value' => '$data->user_name',在搜索中添加另一個關係:

return new CActiveDataProvider('Expense', array(
      'criteria' => array(
        'with' => array('cre8By' => array('joinType' => 'LEFT JOIN'), 
            'lstUpdtBy' => array('joinType' => 'LEFT JOIN') 
            ), 
        'together' => true 
      ) 
     )); 
+0

我不想改變cre8_ts。我需要在cre8_by&lst_updt_by列中顯示user_name。 –

+0

錯誤地提到了字段名稱。現在更新。 –

+0

獲取'include(MUser.php):未能打開流:沒有這樣的文件或目錄[error] [php] include(MUser.php):未能打開流:沒有這樣的文件或目錄(C:\ xampp \ htdocs \ yii-1.1.14.f0fee9 \ framework \ YiiBase.php:427)' –