首页 > 编程语言 >【PHP】关于fastadmin框架中使用with进行连表查询时setEagerlyType字段的理解

【PHP】关于fastadmin框架中使用with进行连表查询时setEagerlyType字段的理解

时间:2024-07-09 16:59:21浏览次数:10  
标签:product 查询 PID setEagerlyType 连表 fastadmin model PHP page

前言

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模式调用关联表的字段是查不到关联数据的
image

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+
如果有大佬知道,请评论区指导一下~谢谢!

上述为个人整理内容,水平有限,如有错误之处,望各位园友不吝赐教!如果觉得不错,请点击推荐和关注!谢谢~๑•́₃•̀๑ [鲜花][鲜花][鲜花]

标签:product,查询,PID,setEagerlyType,连表,fastadmin,model,PHP,page
From: https://www.cnblogs.com/nothavebug/p/18292300

相关文章

  • php函数入门学习(date&time&strtotime)
    1.date()date()函数是PHP中用于格式化日期和时间的一个非常常用的函数。它可以根据指定的格式字符串返回当前时间或指定时间的日期和时间。 基本语法:stringdate(string$format[,int$timestamp=time()])-`$format`:一个格式化字符串,定义了输出的日期和时间的......
  • 基于SpringBoot的酒店订房系统+82159(免费领源码)可做计算机毕业设计JAVA、PHP、爬虫、A
    springboot酒店订房系统摘 要随着科学技术的飞速发展,社会的方方面面、各行各业都在努力与现代的先进技术接轨,通过科技手段来提高自身的优势,酒店订房系统当然也不能排除在外。酒店订房系统是以实际运用为开发背景,运用软件工程开发方法,采用springboot技术构建的一个管理系统......
  • PHP获取目录中的全部内容RecursiveDirectoryIterator
    PHP获取目录中的全部内容RecursiveDirectoryIterator码农老张 posted@2021-03-3109:44 这次我们来介绍一个SPL库中的目录迭代器,它的作用其实非常简单,从名字就可以看出来,就是获取指定目录下的所有内容。之前我们要遍历目录获取目录及目录下的所有文件一般是需要进行递归遍......
  • 入门PHP就来我这(高级)16 ~ 批量删除功能
    有胆量你就来跟着路老师卷起来!--纯干货,技术知识分享路老师给大家分享PHP语言的知识了,旨在想让大家入门PHP,并深入了解PHP语言。  本文给大家接着上篇文章进行图书删除功能的优化,实现批量删除图书的功能。 1添加删除按钮<divclass="panel-heading">......
  • php框架详解-symfony框架
    Symfony是一个流行的开源PHPWeb应用程序框架,它基于MVC(Model-View-Controller)架构设计,旨在加快Web应用程序的开发速度和维护性。以下是Symfony框架的一些详细特点和概念:1. 组件化结构Symfony框架的核心思想是组件化,它将功能分解为一系列独立、可重用的库。每个组件......
  • thinkphp6 使用Workerman测试
    1.首先通过composer安装 think-worker、think-viewcomposerrequiretopthink/think-workercomposerrequiretopthink/think-view安装成功后在项目的config目录会新增3个配置文件 2.修改woker.php中监听的端口return[//扩展自身需要的配置'host'......
  • PHP数据结构当中的栈
    本文由 ChatMoney团队出品栈(Stack)是一种后进先出(LastInFirstOut,LIFO)的数据结构,它只允许在一端(称为栈顶)进行插入和删除操作。栈的应用非常广泛,例如在编程语言的函数调用中,每次函数调用都会将一个新的帧压入栈中,当函数返回时,该帧会被弹出。此外,栈还常用于解决某些算法问题,......
  • PHP数据结构之栈
    本文由 ChatMoney团队出品栈(Stack)是一种后进先出(LastInFirstOut,LIFO)的数据结构,它只允许在一端(称为栈顶)进行插入和删除操作。栈的应用非常广泛,例如在编程语言的函数调用中,每次函数调用都会将一个新的帧压入栈中,当函数返回时,该帧会被弹出。此外,栈还常用于解决某些算法问题,......
  • (麒麟Linux+PHP8+KingBase)麒麟Linux系统安装PHP8及人大金仓KingBase应用
    一、PHP8安装1.1环境CPU内核:aarch64OS:麒麟V104.19.90-23.34.v2101.ky10Web中间件:东方通THS/V6php:8.2.0db:KingbaseESV8R61.2下载https://www.php.net/releases/下载地址:https://www.php.net/distributions/php-8.2.0.tar.gz1.3解压cd/optsudotar-z......
  • SSM-企业人事信息管理系统-98194(免费领源码)可做计算机毕业设计JAVA、PHP、爬虫、APP、
    企业人事信息管理系统的设计与实现摘 要由于数据库和数据仓库技术的快速发展,企业人事信息管理系统建设越来越向模块化、智能化、自我服务和管理科学化的方向发展。人事管理系统对处理对象和服务对象,自身的系统结构,处理能力,都将适应技术发展的要求发生重大的变化。企业人事......