分类: Laravel Eloquent ORM
-
针对 Laravel 9 中嵌套预加载的场景,文章探讨了如何同时为嵌套关系添加查询约束。文中展示了现有实现及生成的 SQL 语句,并详细说明了针对 items 关系添加约束的具体代码修改过程。最终通过比对生成的 SQL 结果,验证了修改后的实现符合预期,成功实现了在嵌套预加载中应用特定条件的需求。
-
文章记录了在 Laravel 9 中使用 chunkById 分块查询时遇到的 SQL 歧义报错问题。该错误提示 where 子句中的 id 列不明确。在尝试添加 column 参数后,虽然解决了歧义,却因为列不存在导致操作中止。最终通过同时添加 alias 参数,解决了报错并生成了符合预期的 SQL 语句。
-
针对 MySQL 8 中 IN 条件用于多个字段时查询结果为空的问题,文章记录了在 Laravel 9 中使用原生查询遇到的语法错误与列数违规报错。尽管报错 SQL 手动执行成功,但程序运行异常,最终决定放弃该 SQL 写法,调整为另一种 SQL 格式,解决了报错并使查询结果符合预期。
-
本文分析了同一条count(*)查询SQL在Navicat中仅需3秒,而在Laravel 9中执行却耗时60秒的性能差异问题。通过在容器Tinker命令行及程序中执行原生SQL进行验证,排除数据库连接因素,确认耗时仅3秒左右。最终排查发现性能瓶颈位于Laravel框架底层Builder.php的runPaginationCountQuery方法。由于暂不便修改框架底层实现,决定将查询条件改为使用where shipping_type in (1, 2)来规避问题,使执行时长降至3秒左右,符合预期。
-
在 Laravel 9 中,为确保批量覆盖写入时 logistics_freight_no 的唯一性,需先清空指定记录再重新写入。由于不得不将请求参数 return_order_id 传递给 ignore 方法以忽略当前 ID,为防止 SQL 注入风险,提前验证其为 Eloquent 模型实例 ID 并强制转换为 int 类型。测试结果显示,指定 ID 下重复校验通过,非指定 ID 校验失败,最终执行的 SQL 符合预期。
-
在 Laravel 9 开发中遇到 Call to undefined method Illuminate\Http\Resources\MissingValue::isEmpty() 报错。经排查,该问题出现在 API 资源类的 $this->whenLoaded() 方法调用中。通过打印调试发现,错误源于在模型关联未被加载时的返回值处理不当。重新修改代码实现逻辑后,问题得到解决,不再报错。
-
本文探讨了在 Laravel 9 中查询单行单列值遇到的问题及其解决方法。针对表存在多行数据时直接调用 value 方法导致的报错现象,调整了查询逻辑。调整后的实现使得当记录不存在时返回 NULL,记录存在时则返回符合预期的第一条记录的单列数值,且生成的 SQL 语句符合预期,最终有效解决了该查询场景下的错误。
-
针对 Laravel 9 中 Job 运行报错超过尝试次数或运行超时的问题,文章记录了基于 chunk 方法处理 876 万条数据时的排查与优化过程。通过对比每次处理 10 条、1000 条及 10000 条记录的平均耗时,发现每次 1000 条记录的处理效率最高且内存占用较少。最终结合测试数据决定限制最大导出行数为 10 万条,在性能环境中实际测试,导出 10 万行 Excel 总耗时 107 秒,问题得到解决。
-
在 Laravel 9 中使用原生表达式查询时遇到 SQL 语法错误,原因是数据中包含单引号导致 SQL 语句异常。参考相关文档后,决定在 whereRaw 方法中采用绑定参数的形式来转义单引号,将需要转义的值作为数组传入第二个参数。调整后不再报错,生成的 SQL 语句已自动对单引号进行转义,查询结果符合预期。
-
本文记录了在 Laravel 9 中使用原生表达式查询时,将 IN 条件应用于多个字段的过程。针对使用 whereRaw 方法时出现的 SQL 语法错误,采取了直接拼接原生 SQL 的方式代替参数绑定,从而成功执行了包含多字段的 IN 条件查询,生成的 SQL 语句符合预期。
