浅谈laravel中的关联查询with的问题
表结构
主表结构:
CreateTable CREATETABLE`user`( `uid`mediumint(8)unsignedNOTNULLAUTO_INCREMENT, `name`varchar(255)COLLATEutf8mb4_unicode_ciNOTNULL, `email`varbinary(255)NOTNULL, PRIMARYKEY(`uid`) )ENGINE=InnoDBAUTO_INCREMENT=114001DEFAULTCHARSET=utf8mb4COLLATE=utf8mb4_unicode_ci
附表结构:
CREATETABLE`user_options`( `id`mediumint(8)unsignedNOTNULLAUTO_INCREMENT, `uid`mediumint(8)unsignedNOTNULL, `age`tinyint(3)NOTNULL, `sex`tinyint(1)NOTNULL, PRIMARYKEY(`id`), KEY`options_key`(`uid`) )ENGINE=InnoDBAUTO_INCREMENT=114001DEFAULTCHARSET=utf8mb4COLLATE=utf8mb4_unicode_ci
并使用seed插入随机数据10W条
测试
分别建立User,Options模型,并且建立一对一的关系,
代码如下:
User::with(['options'=>function($query){ $query->where('sex','=','1'); }])->paginate(15); laravel的debug监控到的SQL运行如下: selectcount(*)asaggregatefrom`user` select*from`user`limit15offset0 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的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。