浅谈laravel中的关联查询with的问题

2025-05-27 0 21

表结构

主表结构:

?

1

2

3

4

5

6

7

8
Create Table

CREATE TABLE `user` (

`uid` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,

`name` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,

`email` varbinary(255) NOT NULL,

PRIMARY KEY (`uid`)

) ENGINE=InnoDB AUTO_INCREMENT=114001 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci

附表结构:

?

1

2

3

4

5

6

7

8
CREATE TABLE `user_options` (

`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,

`uid` mediumint(8) unsigned NOT NULL,

`age` tinyint(3) NOT NULL,

`sex` tinyint(1) NOT NULL,

PRIMARY KEY (`id`),

KEY `options_key` (`uid`)

) ENGINE=InnoDB AUTO_INCREMENT=114001 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci

并使用seed插入随机数据10W条

测试

分别建立User,Options模型,并且建立一对一的关系,

代码如下:

?

1

2

3

4

5

6

7

8

9
User::with(['options'=>function($query){

$query->where('sex','=','1');

}])->paginate(15);

laravel的debug监控到的SQL运行如下:

select count(*) as aggregate from `user`

select * from `user` limit 15 offset 0

select * from `user_options` where `user_options`.`uid` in ('1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13', '14', '15') and `sex` = '1'

结论

如果是需要使用附表的过滤做列表筛选,使用with就不是很好了!

使用with的的意思,在确定主信息的时候,罗列符合条件的附表信息,适合单条或者少量主表信息或者主表信息筛选

以上这篇浅谈laravel中的关联查询with的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持快网idc。

原文链接:https://blog.csdn.net/diyly/article/details/78552430

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 建站教程 浅谈laravel中的关联查询with的问题 https://www.kuaiidc.com/70771.html

相关文章

猜你喜欢
发表评论
暂无评论