当前位置:首页 > CMS教程 > 其它CMS > 列表

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

发布:smiling 来源: PHP粉丝网  添加日期:2021-12-28 20:34:08 浏览: 评论:0 

今天小编就为大家分享一篇浅谈laravel中的关联查询with的问题,具有很好的参考价值,希望对大家有所帮助,一起跟随小编过来看看吧。

表结构

主表结构:

  1. Create Table 
  2.  
  3. CREATE TABLE `user` ( 
  4.  `uid` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, 
  5.  `namevarchar(255) COLLATE utf8mb4_unicode_ci NOT NULL
  6.  `email` varbinary(255) NOT NULL
  7.  PRIMARY KEY (`uid`) 
  8. ) ENGINE=InnoDB AUTO_INCREMENT=114001 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci 

附表结构:

  1. CREATE TABLE `user_options` ( 
  2.  `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, 
  3.  `uid` mediumint(8) unsigned NOT NULL
  4.  `age` tinyint(3) NOT NULL
  5.  `sex` tinyint(1) NOT NULL
  6.  PRIMARY KEY (`id`), 
  7.  KEY `options_key` (`uid`) 
  8. ) ENGINE=InnoDB AUTO_INCREMENT=114001 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci 

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

测试

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

代码如下:

  1. User::with(['options'=>function($query){ 
  2.       $query->where('sex','=','1'); 
  3.     }])->paginate(15); 

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

  1. select count(*) as aggregate from `user` 
  2. select * from `user` limit 15 offset 0 
  3. 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的的意思,在确定主信息的时候,罗列符合条件的附表信息,适合单条或者少量主表信息或者主表信息筛选。

Tags: laravel关联查询 with

分享到: