关于joinWith查询的疑问
Jun 06, 2016 pm 08:34 PM
大家好,请问使用joinWith后,我看debug的sql记录,发现会多出来一条查询。
如 有表table_a、table_b关系为table_a.classid = table_b.id
使用如下查询后
<code>$query = info::find()->select(['table_a.*','table_b.name'); $query->joinWith('infoClass'); </code>
生成sql大致如下
<code>SELECT * FROM `table_a` LEFT JOIN `table_b` ON `table_a`.`classid` = `table_b`.`id` LIMIT 20 </code>
然后会多一个查询
<code>SELECT * FROM `table_b` WHERE `id` IN ('3', '7') </code>
问题是我之前的查询已经 获取到了table_b的内容了。
所以第二条sql 我个人认为没有必要在去查询一次数据库了。
请问大家,是如何避免这个二次查询的。 或者这个二次查询是有什么必要?
请大家解答,谢谢。
回复内容:
大家好,请问使用joinWith后,我看debug的sql记录,发现会多出来一条查询。
如 有表table_a、table_b关系为table_a.classid = table_b.id
使用如下查询后
<code>$query = info::find()->select(['table_a.*','table_b.name'); $query->joinWith('infoClass'); </code>
生成sql大致如下
<code>SELECT * FROM `table_a` LEFT JOIN `table_b` ON `table_a`.`classid` = `table_b`.`id` LIMIT 20 </code>
然后会多一个查询
<code>SELECT * FROM `table_b` WHERE `id` IN ('3', '7') </code>
问题是我之前的查询已经 获取到了table_b的内容了。
所以第二条sql 我个人认为没有必要在去查询一次数据库了。
请问大家,是如何避免这个二次查询的。 或者这个二次查询是有什么必要?
请大家解答,谢谢。
joinWith其实接收三个参数, 其中第二参数指定是否启用贪婪加载,它默认是 true 就是启用,也就是你所看到的,会去根据主表查询出所有的relation。
要想禁用在调用 joinWith 的时候传入第二参数,并设置为 false, 那么就不会再去执行下面的SQL了

Artikel Panas

Alat panas Tag

Artikel Panas

Tag artikel panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Panduan Pemasangan dan Naik Taraf PHP 8.4 untuk Ubuntu dan Debian

Cara Menyediakan Kod Visual Studio (Kod VS) untuk Pembangunan PHP
