2015-05-17 16:47:53 5072次浏览 1条回答 0 悬赏 100 金钱

大家好,请问使用joinWith后,我看debug的sql记录,发现会多出来一条查询。

如 有表table_a、table_b关系为table_a.classid = table_b.id
使用如下查询后

$query = info::find()->select(['table_a.*','table_b.name');

$query->joinWith('infoClass');

生成sql大致如下

SELECT * FROM `table_a` LEFT JOIN `table_b` ON `table_a`.`classid` = `table_b`.`id`  LIMIT 20

然后会多一个查询

SELECT * FROM `table_b` WHERE `id` IN ('3', '7')

问题是我之前的查询已经 获取到了table_b的内容了。
所以第二条sql 我个人认为没有必要在去查询一次数据库了。

请问大家,是如何避免这个二次查询的。 或者这个二次查询是有什么必要?

请大家解答,谢谢。

  • 回答于 2015-05-19 09:21 举报

    你确定使用joinwith后会多出第二个查询?
    如果确实,想知道怎么具体产生的估计要看源码了

    1 条回复
    回复于 2015-05-19 18:16 回复

    是的, 因为我在view中继续输出了 关系中的属性。 所以造成了 第二次查询。
    请问,这样的需求,应该如何实现? 我现在是直接findbysql。之后输出array,view手写了各个属性名称实现的。
    不知道是否有简单点的办法。整体目标就是一次查询,获取关系型数据,之后不再进行查询了。
    谢谢了。

您需要登录后才可以回答。登录 | 立即注册
xjdata
CEO

xjdata

注册时间:2011-12-07
最后登录:2021-07-09
在线时长:112小时28分
  • 粉丝23
  • 金钱14169
  • 威望75
  • 积分16039

热门问题