Yii关联查询使用with无法生成正确sql的问题-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文

Yii关联查询使用with无法生成正确sql的问题

2016-06-08 17:34:15 1732 1

默认yii中ar查询是可以不使用with的,这样会使用延迟加载功能进行对象关联查询,很方便,但是带来了效率问题。

所以考虑使用with进行预加载,但是每当我使用with时就会出现sql错误,查看了error之后发现是因为relations里添加的order,condition,on等条件在生成最终的sql时不会自动加上表别名。

希望有了解的同学能提供一下解决办法。

这么说可能大家不太明白,我详细说明一下.

假设结构如下:

class CategoryModel{
  function relations() {
    return array(
        'description' => array(self::HAS_ONE,'CategoryDescription','category_id'),
    );
  }
  function defaultScope() {
    return array(
      'condition' => 'language=1',
      'order'     => 'created desc',
    );
  }
}
class CategoryDescriptionModel{
}
class SiteModel{
  function relations() {
    return array(
        'description' => array(self::HAS_ONE,'SiteDescription','site_id'),
        'category' => array(self::BELONGS_TO,'Category','category_id'),
    );
  }
  function defaultScope() {
    return array(
      'condition' => 'language=1',
      'order'     => 'created desc',
    );
  }

}
class SiteDescriptionModel{
}
那么当使用with的时候,created desc会出现歧义,比如.

Site::model()->count();
Site::model()->with('description')->findAll();
Site::model()->with('description','category','category.description');

上面后两个语句中的created desc就会成为语法错误,因为Yii进行了join之后会给表增加alias,所以没有alias的字段名无法识别.

之后我尝试和给所有的model定义alias,然后将scope中的order改为alias.created desc.但是产生了另一个问题,就是在count()的时候是没有Join操作的,所以alias.created desc也不识别而报错了.

官方文档中说scope中的字段要消除歧义,但是我没有找到一个完美的解决办法,除了定义alias之外还有别的么?

取消 提交回答
全部回答(1)
  • 小旋风柴进
    2019-07-17 19:32:26

    要用$criteria = new CDbCriteria(); 才可以完美解决

    0 0
相关问答

3

回答

请教一个范围查询的问题

小文文文 2019-06-14 14:37:01 115303浏览量 回答数 3

4

回答

Spark 【问答合集】

社区小助手 2019-05-29 14:13:40 127085浏览量 回答数 4

10

回答

【精品问答合集】Hbase热门问答

hbase小能手 2019-05-29 14:37:26 120767浏览量 回答数 10

38

回答

干货分享:DBA专家门诊一期:索引与sql优化问题汇总

xiaofanqie 2014-12-25 15:13:38 92062浏览量 回答数 38

1

回答

通过spark-thriftserver读取hive表执行sql时,tasks 数量怎么设置

游客iwhrjhvjoyqts 2019-07-05 15:30:22 114119浏览量 回答数 1

38

回答

[@饭娱咖啡][¥20]对于慢sql有没有什么比较实用的诊断和处理方法?

江小白太白 2018-10-30 18:47:38 142038浏览量 回答数 38

2

回答

mySQL数据库报错You have an error in your SQL syntax

落地花开啦 2016-02-14 16:09:24 128811浏览量 回答数 2

8

回答

flink sql 支持checkpoints吗?

游客izljdlkgbdwfc 2019-07-10 17:46:37 123929浏览量 回答数 8

9

回答

HaoSQL,好用的SQL等数据库一键包发布!

梦丫头 2017-11-14 15:20:55 71080浏览量 回答数 9

78

回答

【2013.9.5修正版图文】新手如何使用阿里云(linux)服务器建站(搬站)

姑苏公子 2013-04-11 00:39:13 107984浏览量 回答数 78
2736
文章
6591
问答
问答排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载