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正常。 