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'),
您还必须为下一个关系进行更新。