建议列表排序时,自动加上model或表前缀

Controller代码




public function actionIndex() {

    	$dataProvider=new CActiveDataProvider('Estate',array(

    		'criteria'=>array('with'=>array('regional','street')),

    	));

		$this->render('index',array(

			'dataProvider'=>$dataProvider,

		));

    }



View代码




<?php $this->widget('zii.widgets.grid.CGridView', array(

	'dataProvider'=>$dataProvider,

	'columns'=>array(

		'name',

		'address',

		array(

			'name'=>'regional_id',

			'value'=>'$data->regional->name'

		),array(

			'name'=>'street_id',

			'value'=>'$data->street->name'

		),

		array('class'=>'CButtonColumn'),

	),

)); ?>



现在点name列排序时,会产生错误,信息如下

CDbCommand 无法执行 SQL 语句: SQLSTATE[23000]: Integrity constraint violation: 1052 Column 'name' in order clause is ambiguous

还有,如果多对多时,中间表如果有个主键名为id时,也出现以上类似错误

顶起,让强哥看见

用头顶

的确可以考虑加强CGridView,多表join时排序自动加关系前缀,我们现在只能通过设置CSort的attributes来实现,但所有字段都需要重新定义一遍。




$sort = new CSort('Member');

$sort->attributes = ...