THINKPHP_(2)_TP模型的多表关联查询和多表字段的关键字搜索。
问题:

上述内容中,标题和学年属于一个数据表。分类则属于另外一个数据表,并且是利用id关联后,另外一个数据表中的title字段。
需要设置关键字搜索,实现多表关联查询和多表字段的关键字搜索。
解决方法:
编写如下代码:
public function search($srcfrom)
{
// 整理变量
$src = [
'category' => ''
,'searchval' => ''
,'status' => ''
,'bfdate' => ''
,'enddate' => ''
];
$src = array_cover($srcfrom, $src) ;
if(isset($srcfrom['bfdate']) && strlen($srcfrom['bfdate']) > 0)
{
$src['bfdate'] = $srcfrom['bfdate'];
}else{
$src['bfdate'] = date("Y-m-d", strtotime("-6 year"));
}
if(isset($srcfrom['enddate']) && strlen($srcfrom['enddate']) > 0)
{
$src['enddate'] = $srcfrom['enddate'];
}else{
$src['enddate'] = date("Y-m-d", strtotime('4 year'));
} // 查询数据
$data = $this
->whereTime('bfdate|enddate', 'between', [$src['bfdate'], $src['enddate']])
// ->alias("c")
->withJoin(
// "glCategory"
[
'glCategory'=>function($query){
$query->field('id, title');
},
]
)
->when(strlen($src['searchval']) > 0, function($query) use($src){
$query->where("xueqi.title|glCategory.title|xuenian", 'like', '%' . $src['searchval'] . '%');
})
->when(strlen($src['category']) > 0, function($query) use($src){
$query->where('category', $src['category']);
})
->when(strlen($src['status']) > 0, function($query) use($src){
$query->where('status', $src['status']);
})
// ->with(
// [
// 'glCategory'=>function($query){
// $query->field('id, title');
// },
// ]
// )
->select(); file_put_contents('D:\log.txt',$this->getLastSql()); return $data;
}
在上述搜索中,我们利用withJoin进行关联。同时,利用
$query->where("xueqi.title|glCategory.title|xuenian", 'like', '%' . $src['searchval'] . '%');
这里的易错点:
当关联多表进行关键字搜索的时候,当前表和关联表都有title字段。我们在写sql语句的时候,会直接用title和glCategory.title进行区分。
但是在tp的世界里,必须注明模型xueqi.title(model的类名叫Xueqi,但是在where中,用首字母小写的xueqi即可)。
同时,对于没有多表重复的xuenian子弹,我们不需要注明xueqi。这也是sql和tp模型的一些不同之处。
THINKPHP_(2)_TP模型的多表关联查询和多表字段的关键字搜索。的更多相关文章
- THINKPHP_(4)_TP模型中with、withJoin和多层关联的深入分析
1.个人之前博文: TP模型的多表关联查询和多表字段的关键字搜索 TP6中实现多层关联,第一个表关联第二个表查询出的数据,再关联第三个表 2.withJoin的特性 2.1 第一个特性 在TP模型的多 ...
- 字节跳动基于ClickHouse优化实践之“多表关联查询”
更多技术交流.求职机会.试用福利,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 相信大家都对大名鼎鼎的ClickHouse有一定的了解了,它强大的数据分析性能让人印象深刻.但在字节大量 ...
- MSSQL N张表关联查询
declare @newTime varchar(50); declare @lasetTime varchar(50); set @newTime= getdate(); set @lasetTim ...
- RDIFramework.NET 中多表关联查询分页实例
RDIFramework.NET 中多表关联查询分页实例 RDIFramework.NET,基于.NET的快速信息化系统开发.整合框架,给用户和开发者最佳的.Net框架部署方案.该框架以SOA范式作为 ...
- 图解SQL多表关联查询
图解SQL多表关联查询 网上看了篇文章关于多表连接的,感觉很好,记录下来,以便日后自己学习 内连接 左连接 右连接 全外连接 1. 查两表关联列相等的数据 ...
- Oracle 数据库(oracle Database)Select 多表关联查询方式
Oracle数据库中Select语句语法及介绍 SELECT [ ALL | DISTINCT ] <字段表达式1[,<字段表达式2[,…] FROM <表名1>,<表名 ...
- ORACLE数据库多表关联查询效率问题解决方案
最近在做项目中遇到多表关联查询排序的效率问题(5张以上40W+数据的表),查询一次大概要20多秒,经过一番苦思冥想,处理方案如下: 1.软件设计初期,需要一对一关联的表应该设计在一张大表里,这样虽然字 ...
- mongodb操作之使用javaScript实现多表关联查询
一.数据控制 mongodb操作数据量控制,千万控制好,不要因为操作的数据量过多而导致失败. 演示一下发生此类错误的错误提示:
- ofbiz学习笔记01--多表关联查询
不管做什么项目,肯定会用到多表关联查询数据,从网络查询得知ofbiz有三种多表关联查询方法 实现一:Screem.xml 中的 section 里,加 <action>, 加 get-re ...
随机推荐
- 4-socket套接字编程
socket套接字编程 目标:根据socket模块提供的接口函数,进行组合使用完成基于tcp或者udp的网络编程. 套接字:完成上述目标的一种编程手段,编程方案. 套接字分类: 流式套接字(sock_ ...
- BLDC有感FOC算法理论及其STM32软硬件实现
位置传感器:旋转编码器 MCU:STM32F405RGT6 功率MOS驱动芯片:DRV8301 全文均假设在无弱磁控制的情况下 FOC算法理论 首先,我们要知道FO ...
- overflow和absolute之间的问题,transfrom可以解决
CSS代码: .overflow { width: 191px; height: 191px; border: 2px solid #beceeb; overflow: hidden; } .over ...
- 播放视频插件swfobject.js与Video Html5
播放视频的方法: 方法一. 使用HTML5播放 <video src="./files/Clip_480_5sec_6mbps_h264.mp4" width="1 ...
- 洛谷P1089 津津的储蓄计划
题目描述 津津的零花钱一直都是自己管理.每个月的月初妈妈给津津300元钱,津津会预算这个月的花销,并且总能做到实际花销和预算的相同. 为了让津津学习如何储蓄,妈妈提出,津津可以随时把整百的钱存在她那里 ...
- Python中math和cmath模块的使用
目录 Math模块 Cmath模块 Math模块 pi 数字常量,圆周率 e 表示一个常量 sqrt(x) 求x的平方根 ...
- Python脚本与Metasploit交互进行自动永恒之蓝攻击
我们首先利用 findTarget() 函数找到目标网段或目标主机中开放了445端口的主机,然后利用 confickerExploit() 函数将攻击代码写入 configure.rc 配置文件中,最 ...
- Jenkins + Docker + ASP.NET Core自动化部署
本来没想着要写这篇博客,但是在实操过程中,一个是被网络问题搞炸了心态(真心感觉网络能把人搞疯,别人下个包.下个镜像几秒钟搞定,我看着我的几KB小水管真是有苦说不出),另一个就是这里面坑还是有一些的,写 ...
- java如何调用本地扬声器
各位看官可以关注博主个人博客,了解更多信息. 作者:Surpasser 链接地址:https://surpass.org.cn 前言 博主的毕设系统在做一个餐厅的点餐管理系统,在记性移动端页面开发的时 ...
- Day015 异常处理机制
异常处理机制 抛出异常 捕获异常 异常处理的五个关键字 try:监控一个代码块,有异常就能通过catch捕获 catch(想要捕获的异常类型):捕获想要捕获的异常,catch代码块的代码只有在捕获到异 ...