1、打印程序执行的 SQL 语句,结果如下。如图1

PHP
$builder = ThemeAsset::select('updated_at', 'asset_key')
->where('theme_id', '=', $this->dbViewStorage->getThemeId())
->whereRaw('LOWER(asset_key) regexp ?', [strtolower($this->targetToRegex($target))]);
$query = str_replace(array('?'), array('\'%s\''), $builder->toSql());
$query = vsprintf($query, $builder->getBindings());
dump($query);
exit;
Plaintext
"select `updated_at`, `asset_key` from `theme_asset` where `theme_id` = 'theme' and LOWER(asset_key) regexp '^(assets|apps\.+\.+\assets)'"
2、打印程序执行的 SQL 语句结果,其数量为 79 条。数组元素从 0 开始。如图2

3、将打印 SQL,复制至 MySQL 5.7 中执行。其数量为 81 条。如图3

4、决定将 whereRaw 中的 ? 取消,调整为原生 SQL。打印程序执行的 SQL 语句结果,其数量为 81 条。如图4

PHP
$builder = ThemeAsset::select('updated_at', 'asset_key')
->where('theme_id', '=', $this->dbViewStorage->getThemeId())
->whereRaw('LOWER(asset_key) regexp \'^(assets|apps\.+\.+\assets)\'')
5、保留 whereRaw 中的 ?,需要使用 addslashes 转义 \。打印程序执行的 SQL 语句结果,其数量为 81 条。符合预期。
PHP
$assets = ThemeAsset::select('updated_at', 'asset_key')
->where('theme_id', '=', $this->dbViewStorage->getThemeId())
->whereRaw('LOWER(asset_key) regexp ?', [strtolower(addslashes($this->targetToRegex($target)))])
->get();
PHP / Laravel / Yii2 老项目维护与长期技术支持
如果你的 PHP / Laravel / Yii2 项目已经上线,但遇到原开发离职、Bug 长期无人修复、接口不稳定、性能下降、代码难以接手等问题,可以联系我做一次远程技术排查。
适合以下情况:
✅ 老旧 PHP 系统无人维护
✅ Laravel / Yii2 项目 Bug 修复
✅ 后台管理系统小功能迭代
✅ RESTful API 接口排查
✅ MySQL / Redis / Nginx 性能问题
✅ 长期远程兼职维护
可先从一次小问题开始:
✅ 线上报错排查
✅ 接口异常分析
✅ 慢查询与性能瓶颈定位
✅ 代码结构初步评估
✅ 部署环境与日志检查
如需咨询,请联系我,并注明:PHP 维护咨询。
联系方式:
Telegram:@shuijingwan
微信:13980074657
邮箱:shuijingwanwq@gmail.com
