微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

php – 如何在Yii的过滤器中指定表名?

有两个表,与会者和小组.两者都有性别领域.每位与会者被分配到1个组.我已经成功显示了我的CGridView参与人数,但是当我添加代码来过滤性别时,我收到以下错误.要计算组中与会者的数量,我手动执行加入;但是联接使得“性别”字段模糊不清.有没有办法在过滤器中指定它应该使用’t’或基表?

当我加载视图时,它正常运行;当我点击对性别进行排序时,它会给我这样的信息:

错误信息

>     Error 500: <h1>CDbException</h1>
>     <p>CDbCommand Failed to execute the sql statement: sqlSTATE[23000]: Integrity constraint violation: 1052 Column 'gender'
> in where clause is ambiguous. The sql statement executed was: SELECT
> COUNT(*) FROM (SELECT t.*, IFNULL( count(tbl_attendee.id), 0) as
> attendeeCount FROM `tbl_group` `t` LEFT JOIN tbl_attendee ON
> tbl_attendee.group_id = t.id WHERE gender LIKE :ycp0 GROUP BY t.id) sq
> (/Applications/MAMP/htdocs/yiiroot/framework/db/CDbCommand.PHP:516)</p><pre>#0
> /Applications/MAMP/htdocs/yiiroot/framework/db/CDbCommand.PHP(411):
> CDbCommand->queryInternal('fetchColumn', 0, Array)

型号代码

$criteria=new CDbCriteria;
$criteria->compare('name',$this->name,true);
$criteria->compare('gender',$this->gender,true);                
$criteria->compare('agegroup',$this->agegroup,true);
$criteria->select = 't.*, IFNULL( count(tbl_attendee.id), 0) as attendeeCount';
$criteria->join = 'LEFT JOIN tbl_attendee ON tbl_attendee.group_id = t.id';
$criteria->group = 't.id';

$sort = new CSort();
$sort->attributes = array(
    'attendeeCount'=>array(
    'asc'=>'attendeeCount ASC',
    'desc'=>'attendeeCount DESC',
    ),
    '*', // add all of the other columns as sortable
);

return new CActiveDataProvider($this, array(
'criteria'=>$criteria,
'sort'=>$sort,
));

查看代码

$this->widget('zii.widgets.grid.CGridView', array(
    'id'=>'group-grid',
    'dataProvider'=>$model->search(),
    'filter'=>$model,
    'columns'=>array(
       'name',
       array(
        'name'=>'gender',
        'value'=>'Group::$genderLabels[$data->gender]',
        'filter'=>Group::$genderLabels, // <-- This is the filter that breaks.
                                        // $genderLabels = array('Female','Male);
    ),

解决方法:

啊!我知道了.

在模型代码中更改了这一行:

$基准 – &GT比较( ‘性别’,$这 – &GT性别,TRUE);

$基准 – &GT比较( ‘t.gender’,$这 – &GT性别,TRUE);

Found the answer here.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐