Rumah > pembangunan bahagian belakang > tutorial php > 关于joinWith查询的疑问

关于joinWith查询的疑问

WBOY
Lepaskan: 2016-06-06 20:34:43
asal
1247 orang telah melayarinya

大家好,请问使用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>
Salin selepas log masuk
Salin selepas log masuk

生成sql大致如下

<code>SELECT * FROM `table_a` LEFT JOIN `table_b` ON `table_a`.`classid` = `table_b`.`id`  LIMIT 20
</code>
Salin selepas log masuk
Salin selepas log masuk

然后会多一个查询

<code>SELECT * FROM `table_b` WHERE `id` IN ('3', '7')
</code>
Salin selepas log masuk
Salin selepas log masuk

问题是我之前的查询已经 获取到了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>
Salin selepas log masuk
Salin selepas log masuk

生成sql大致如下

<code>SELECT * FROM `table_a` LEFT JOIN `table_b` ON `table_a`.`classid` = `table_b`.`id`  LIMIT 20
</code>
Salin selepas log masuk
Salin selepas log masuk

然后会多一个查询

<code>SELECT * FROM `table_b` WHERE `id` IN ('3', '7')
</code>
Salin selepas log masuk
Salin selepas log masuk

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

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

请大家解答,谢谢。

joinWith其实接收三个参数, 其中第二参数指定是否启用贪婪加载,它默认是 true 就是启用,也就是你所看到的,会去根据主表查询出所有的relation。

要想禁用在调用 joinWith 的时候传入第二参数,并设置为 false, 那么就不会再去执行下面的SQL了

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan