TP5升8数组查询条件表达式修改法

星墨酱_9622

星墨酱_9622

2026-09-20

571人浏览

原创

tp5的where数组条件在tp8中不再兼容,因底层查询构造器彻底重构;tp8仅支持三元组、闭包或简单键值对,需改用链式调用如where('id','in',[1,2,3])或闭包封装。

tp5升8数组查询条件表达式修改法

TP5 升级到 TP8 后,where 数组条件写法**不再兼容**,直接沿用 TP5 的数组结构会查不到数据或报错——这不是语法糖差异,而是查询构造器底层彻底重构了。

TP5 的 where(['id' => ['in', [1,2,3]], 'status' => 1]) 在 TP8 中无效

TP8 已移除对混合操作符数组的解析能力。原 TP5 支持的关联数组中嵌套 ['in', [...]]['like', '%val%'] 等写法,在 TP8 中会被当作字段名字符串处理,最终生成错误 SQL(如 WHERE `id` = "Array")。

  • 常见错误现象:where(['name' => ['like', '%admin%']]) 查询返回空,日志里看到的是 WHERE `name` = 'Array'
  • 根本原因:TP8 的 where() 方法只接受「字段-操作符-值」三元组、闭包,或最简键值对(自动转为 =
  • 正确迁移方式不是“改写数组”,而是改用链式调用或闭包

TP8 替代写法:链式调用 or 闭包 where

必须显式声明操作符,不能依赖数组结构隐含语义。以下两种写法在 TP8 中等效且推荐:

AI智研社
AI智研社

一个围绕人工智能技术与应用建立的综合性AI知识平台,提供相关内容和学习资源。

下载
  • 链式调用(清晰、易调试):Db::table('user')->where('id', 'in', [1,2,3])->where('status', '=', 1)->select()
  • 闭包封装(适合复杂条件组合):Db::table('user')->where(function ($query) { $query->where('id', 'in', [1,2,3])->whereOr('name', 'like', '%admin%'); })->select()
  • 注意:whereOrwhereNot 等方法在 TP8 中需明确作用于闭包内,不能靠数组末尾加 'or' 字符串

FIND_IN_SET 这类 MySQL 函数要改用 exp + raw

TP5 中常见的 $map[] = ['exp', 'FIND_IN_SET(2,category)'] 写法,在 TP8 中仍可用,但必须配合 Db::raw() 防止被自动转义:

  • 错误写法:where('FIND_IN_SET(2,category)') → TP8 会把它当字段名处理
  • 正确写法:where('FIND_IN_SET(:id,category)', ['id' => 2])where(['exp', Db::raw("FIND_IN_SET(2,category)")])
  • 带变量时务必用参数绑定:where('FIND_IN_SET(:id,category)', ['id' => $adminId]),避免 SQL 注入

升级后最容易忽略的点是:TP8 不再尝试“猜”你的意图。它不会把 ['name' => ['like', '%x%']] 拆解成 LIKE 条件,也不会把二维数组自动识别为 OR 组合。所有逻辑必须由你显式写出——这不是倒退,而是把控制权交还给开发者,避免隐式行为引发的线上故障。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
AionClaw AI智能体与电脑自动化任务执行功能使用教程
AionClaw AI智能体与电脑自动化任务执行功能使用教程

AionClaw专题整理AI智能体与电脑自动化相关功能使用教程,涵盖安装部署、AI任务执行、Skills技能、文件处理、浏览器控制、电脑操作、持久记忆、聊天工具连接以及办公、编程和内容创作等功能,帮助用户快速掌握AionClaw的实际使用方法。

2026.09.20

0

15

AI视频生成软件推荐
AI视频生成软件推荐

本专题汇总了当前主流的AI视频生成软件推荐与排行榜单,涵盖seko、AniShort、剧云、Lovart、LiblibAI及立刻mv等热门工具。同时整理了各软件在文生视频、图生视频、时长限制、画质表现及免费额度等方面的差异对比,助您快速选对适合创作需求的AI视频生成工具。

2026.09.16

160

9

ai生成视频的工具免费版合集
ai生成视频的工具免费版合集

本专题汇总了当前免费AI生成视频工具的排行榜与推荐清单,涵盖seko、讯飞智作、AniShort及剧云、Lovart等多模型集成平台。同时整理了各工具的免费额度、输出时长、水印政策及适用场景差异,助您快速选择合适工具开启AI视频创作。

2026.09.16

60

10

Pandas时间序列分析与可视化报表
Pandas时间序列分析与可视化报表

本专题整理Pandas日期转换、时间索引、重采样、滚动窗口、时区处理、plot绘图、Styler表格样式和报表输出方法。

2026.09.16

80

23

Pandas数据筛选索引与清洗处理
Pandas数据筛选索引与清洗处理

本专题整理Pandas中的loc、iloc、条件筛选、query查询、缺失值处理、重复值删除、类型转换和字符串列清洗方法。

2026.09.16

60

25

Pandas数据读取导入与文件导出处理
Pandas数据读取导入与文件导出处理

本专题整理Pandas读取CSV、Excel、JSON、SQL、Parquet等文件的方法,以及to_csv、to_excel、to_sql和to_parquet等常用数据导出流程。

2026.09.16

40

27

GDB怎么设置断点
GDB怎么设置断点

本专题介绍GDB按照函数名、源代码行号和文件位置设置断点的方法,详细说明run、continue、next、step等命令的配合使用,帮助定位程序崩溃、逻辑异常及代码未按预期执行的问题。

2026.09.11

360

28

GDB怎么查看变量值
GDB怎么查看变量值

本专题介绍GDB调试过程中查看变量值的具体方法,涵盖局部变量、函数参数、数组、结构体和指针内容查询,同时整理变量持续显示、格式化输出及无法读取变量时的排查思路。

2026.09.11

120

22

GDB C++程序怎么调试
GDB C++程序怎么调试

本专题围绕GDB调试C++程序的实际过程,详细说明程序编译、调试器启动、命令行参数传入、断点命中和程序继续运行等步骤,并介绍条件断点、临时断点和观察点的设置方法,方便开发者跟踪复杂代码的执行状态。

2026.09.11

140

20

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
phpStudy极速入门视频教程
phpStudy极速入门视频教程

共6课时 | 54.6万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时 | 133万人学习