前言
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一款开源且免费商用的后台开发框架,它基于ThinkPHP和Bootstrap两大主流技术构建的极速后台开发框架,它有着非常完善且强大的功能和便捷的开发体验,使我逐渐喜欢上了它。
什么是setEagerlyType?
1.回归正题,什么是setEagerlyType?
setEagerlyType是fastadmin在使用关联查询时提供的配置字段,为设置预载入方式。根据官方文档描述,在V5.0.4+版本开始一对一关联预载入支持两种方式:setEagerlyType(0) 是JOIN方式(一次查询) setEagerlyType(1)是IN方式(两次查询)。
2.例子
2.1 当使用join的方式(setEagerlyType(0))
在model层对应的model文件加入该函数 $this->belongsTo(被关联表,外键, 主键, [], ‘LEFT’)->setEagerlyType(关联模式 0/1 );
public function product()
{
return $this->belongsTo('app\common\model\xxxx\xxxx', 'PID', 'PID', [], 'LEFT')->setEagerlyType(0);
}
//此处返回的是一个二维数组
$List=$this->xxxxModel->with('product')->page($page, $pageSize)->select();
因为返回的是一个二维数组所以可以使用关联表中的字段product.name=’xxx’
$whiskybaseList=$this->xxxxxModel->with('whiskybaseProduct')->where('product.name','xxx')->page($page, $pageSize)->select();
当然,如果需要关联多张表也可以把with中的参数写成数组形式
$whiskybaseList=$this-xxxxModel->with(['pProduct','xxxxxxxxx','xxxxx'])->page($page, $pageSize)->select();
2.2 当使用In的方式(setEagerlyType(1))
public function product()
{
return $this->belongsTo('app\common\model\xxxx\xxxx', 'PID', 'PID', [], 'LEFT')->setEagerlyType(1);
}
//此处返回的是一个一维数组
$whiskybaseList=$this->xxxxModel->with('product')->page($page, $pageSize)->select();
因为使用的是IN模式,返回的是一个一维数组所以无法使用关联表中的字段product.name=’xxx’
$whiskybaseList=$this->xxxxModel->with('product')->where('product.name','xxx')->page($page, $pageSize)->select();
使用IN模式调用关联表的字段是查不到关联数据的
3.请求速度
通常情况下使用 JOIN 操作比 IN 子查询更快。这是因为数据库优化器在执行查询计划时能够更有效地处理 JOIN 操作,而且 JOIN 操作可以使用索引来加速数据检索。
4.疑问
我前段时间使用关联表的时候就遇到了一个问题,很奇怪,希望知道的大佬评论区指点一下!
问题!
就是公司要求我爬取国外的一个网站的数据,导入平台作为借鉴,然后爬取并清理完数据以后,一张是产品表,里面有一个PID对应着产品详情表的PID,所以我在做查询时我需要关联详情表的PID获取详情,数据的话产品表与详情表都各15w条数据,而且我将PID设置为索引了已经,然而当我在做分页查询时,使用的是join查询,查询100s都没出结果,但是我使用IN查询,0.1s既有结果,这又是为什么?代码如下
model层
public function whiskybaseProduct()
{
return $this->belongsTo('app\common\model\Whiskybase\Whiskybase', 'PID', 'PID', [], 'LEFT')->setEagerlyType(1);
}
业务层
//因为查询的数据字段基本大部分要用到,所以也没有使用field去指定返回什么字段,虽然这样能快一丢丢
$whiskybaseList=$this->WhiskybasedetailModel->where('title_zh', 'LIKE', '%' . $keyWord . '%')->with('whiskybaseProduct')->page($page, $pageSize)->order($sort, 'asc')->select();
业务层不变,model层setEagerlyType(1)改为IN方式setEagerlyType(0),查询速度从0.1s变为100s+
如果有大佬知道,请评论区指导一下~谢谢!
上述为个人整理内容,水平有限,如有错误之处,望各位园友不吝赐教!如果觉得不错,请点击推荐和关注!谢谢~๑•́₃•̀๑ [鲜花][鲜花][鲜花]
1.本站内容仅供参考,不作为任何法律依据。用户在使用本站内容时,应自行判断其真实性、准确性和完整性,并承担相应风险。
2.本站部分内容来源于互联网,仅用于交流学习研究知识,若侵犯了您的合法权益,请及时邮件或站内私信与本站联系,我们将尽快予以处理。
3.本文采用知识共享 署名4.0国际许可协议 [BY-NC-SA] 进行授权
4.根据《计算机软件保护条例》第十七条规定“为了学习和研究软件内含的设计思想和原理,通过安装、显示、传输或者存储软件等方式使用软件的,可以不经软件著作权人许可,不向其支付报酬。”您需知晓本站所有内容资源均来源于网络,仅供用户交流学习与研究使用,版权归属原版权方所有,版权争议与本站无关,用户本人下载后不能用作商业或非法用途,需在24个小时之内从您的电脑中彻底删除上述内容,否则后果均由用户承担责任;如果您访问和下载此文件,表示您同意只将此文件用于参考、学习而非其他用途,否则一切后果请您自行承担,如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。
5.本站是非经营性个人站点,所有软件信息均来自网络,所有资源仅供学习参考研究目的,并不贩卖软件,不存在任何商业目的及用途
暂无评论内容