buildSql 方法的bug?

浏览:1820 发布日期:2014/08/02
3.2.2 - 普通 - 未处理
用buildSql编译SQL语句:$sql = $UserMod
                ->alias('A')
                ->field("A.*,B.role_name")
                ->join($RoleMod->getTableName() . " B ON B.role_id=A.role_id", "LEFT")
                ->where($where)
                ->group('A.user_id')
                ->buildSql();

        echo $sql;
        die;
输出的SQL:( SELECT A.*,B.role_name FROM cs_sys_user A A LEFT JOIN cs_sys_user_role B ON B.role_id=A.role_id WHERE A.role_id <> 1 GROUP BY A.user_id )cs_sys_user A A 出现两次别名了

把 buildSql 改为 select 查询则返回正常的:.
$UserMod
                ->alias('A')
                ->field("A.*,B.role_name")
                ->join($RoleMod->getTableName() . " B ON B.role_id=A.role_id", "LEFT")
                ->where($where)
                ->group('A.user_id')
                ->select();

        echo $UserMod->_sql();
        die;
输出的SQL:SELECT A.*,B.role_name FROM cs_sys_user A LEFT JOIN cs_sys_user_role B ON B.role_id=A.role_id WHERE A.role_id <> 1 GROUP BY A.user_id初步检查应是调用 buildSql 方法时 _parseOptions 重复执行了两次?// 数据表别名
        if(!empty($options['alias'])) {
            $options['table']  .=   ' '.$options['alias'];
            echo $options['alias']; //这里输出了两次
        }
现在的解决方法
用原生SQL或把 alias 方法改为 table 方法:$sql = $UserMod
                ->table($UserMod->getTableName() . " A")
                ->field("A.*,B.role_name")
                ->join($RoleMod->getTableName() . " B ON B.role_id=A.role_id", "LEFT")
                ->where($where)
                ->group('A.user_id')
                ->buildSql();

        echo $sql;
        die;
这样buildSql输出SQL正常。
评论(
后面还有条评论,点击查看>>