Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何从YII中的CGridView的两个表中获取数据_Php_Yii - Fatal编程技术网

Php 如何从YII中的CGridView的两个表中获取数据

Php 如何从YII中的CGridView的两个表中获取数据,php,yii,Php,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,

我有以下表格

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);
    }

}
模型定义如下:

$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);
    }

}
实际上我想在CGridView中显示username而不是cre8_by&lst_updt_by列,请帮助我解决这个问题。提前感谢………..

更换
'value'=>'$data->cre8_by',
by

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

'value'=>'$data->user\u name',
替换为

'value' => '$data->lstUpdtBy->user_name',
您必须在搜索中添加另一个关系:

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

我不想更改cre8_ts。我需要在cre8_by&lst_updt_by columns中显示用户名。获取as'include(MUser.php):打开流失败:没有这样的文件或目录[error][php]include(MUser.php):打开流失败:没有这样的文件或目录(C:\xampp\htdocs\yii-1.1.14.f0fee9\framework\YiiBase.php:427)“您有名为MUser.php的模型吗?没有。。。将模型名设置为User.php当您必须将关系更新为
'cre8By'=>数组(self::属于'User','cre8'u by'),
您还必须为下一个关系进行更新。