问题:

上述内容中,标题和学年属于一个数据表。分类则属于另外一个数据表,并且是利用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模型的多表关联查询和多表字段的关键字搜索。的更多相关文章

  1. THINKPHP_(4)_TP模型中with、withJoin和多层关联的深入分析

    1.个人之前博文: TP模型的多表关联查询和多表字段的关键字搜索 TP6中实现多层关联,第一个表关联第二个表查询出的数据,再关联第三个表 2.withJoin的特性 2.1 第一个特性 在TP模型的多 ...

  2. 字节跳动基于ClickHouse优化实践之“多表关联查询”

    更多技术交流.求职机会.试用福利,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 相信大家都对大名鼎鼎的ClickHouse有一定的了解了,它强大的数据分析性能让人印象深刻.但在字节大量 ...

  3. MSSQL N张表关联查询

    declare @newTime varchar(50); declare @lasetTime varchar(50); set @newTime= getdate(); set @lasetTim ...

  4. RDIFramework.NET 中多表关联查询分页实例

    RDIFramework.NET 中多表关联查询分页实例 RDIFramework.NET,基于.NET的快速信息化系统开发.整合框架,给用户和开发者最佳的.Net框架部署方案.该框架以SOA范式作为 ...

  5. 图解SQL多表关联查询

      图解SQL多表关联查询     网上看了篇文章关于多表连接的,感觉很好,记录下来,以便日后自己学习  内连接     左连接     右连接       全外连接   1. 查两表关联列相等的数据 ...

  6. Oracle 数据库(oracle Database)Select 多表关联查询方式

    Oracle数据库中Select语句语法及介绍 SELECT [ ALL | DISTINCT ] <字段表达式1[,<字段表达式2[,…] FROM <表名1>,<表名 ...

  7. ORACLE数据库多表关联查询效率问题解决方案

    最近在做项目中遇到多表关联查询排序的效率问题(5张以上40W+数据的表),查询一次大概要20多秒,经过一番苦思冥想,处理方案如下: 1.软件设计初期,需要一对一关联的表应该设计在一张大表里,这样虽然字 ...

  8. mongodb操作之使用javaScript实现多表关联查询

    一.数据控制 mongodb操作数据量控制,千万控制好,不要因为操作的数据量过多而导致失败. 演示一下发生此类错误的错误提示:

  9. ofbiz学习笔记01--多表关联查询

    不管做什么项目,肯定会用到多表关联查询数据,从网络查询得知ofbiz有三种多表关联查询方法 实现一:Screem.xml 中的 section 里,加 <action>, 加 get-re ...

随机推荐

  1. Josephus问题的queue解法

    问题描述 Josephus问题是一个非常古老的问题.它的范型描述为N个人(0到N-1)围成一圈报数,报道M的人会被剔除,直到最后一个人. 要求找出最后一个人的位置或这N个人被剔除的顺序. 解决思路 我 ...

  2. UVA11019KMP(二维矩阵匹配出现次数)

    题意:     给你两个矩阵,一个大的一个小的,然后问你这个小矩阵在大的矩阵里出现了多少次? 思路:       说好了AC自动机的,我自己尝试写了个暴力的KMP竟然过了,AC自动机自己的模板还没写完 ...

  3. 逆向 stdio.h 函数库 fwrite 函数(调试版本)

    0x01 fwrite 函数 函数原型: size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream) 函数功能:把 ...

  4. 【Android开发高手笔记】Dagger2和它在SystemUI上的应用

    和人类需要群居一样,程序界的进程.线程也需要通信往来.它们的交流则依赖模块之间.文件之间产生的关系.如何快速地搞清和构建这种关系,同时还能减轻彼此的依赖,需要开发者们认真思考. 我们将这种需求称之为依 ...

  5. SpringBoot程序后台运行

    使用nohup命令让进程后台运行 nohup java -jar 自己的springboot项目.jar >日志文件名.log 2>&1 & >日志文件名.log : ...

  6. 一文解决MySQL时区相关问题

    前言: 在使用MySQL的过程中,你可能会遇到时区相关问题,比如说时间显示错误.时区不是东八区.程序取得的时间和数据库存储的时间不一致等等问题.其实,这些问题都与数据库时区设置有关,本篇文章将从数据库 ...

  7. Kafka万亿级消息实战

    一.Kafka应用 本文主要总结当Kafka集群流量达到 万亿级记录/天或者十万亿级记录/天  甚至更高后,我们需要具备哪些能力才能保障集群高可用.高可靠.高性能.高吞吐.安全的运行. 这里总结内容主 ...

  8. C++ primer plus读书笔记——第11章 使用类

    第11章 使用类 1. 运算符重载是一种形式的C++多态. 2. 不要返回指向局部变量或临时对象的引用.函数执行完毕后,局部变量和临时对象将消失,引用将指向不存在的数据. 3. 运算符重载的格式如下: ...

  9. SSM框架整合(Spring+SpringMVC+Mybatis)

    第一步:创建maven项目并完善项目结构  第二步:相关配置 pom.xml 引入相关jar包 1 <properties> 2 <project.build.sourceEncod ...

  10. [Windows] 屏幕截图 - FastStone Capture(FSCapture) v9.4 飞扬时空汉化绿色版(官方地址) 【清晰好用 已验证】

    [Windows] 屏幕截图 - FastStone Capture(FSCapture) v9.4 飞扬时空汉化绿色版(官方地址) [复制链接]     愤怒の葡萄 电梯直达 楼主    发表于 2 ...