You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel中使用Criteria查询转换单位后的价格无返回结果是什么原因?

问题排查与解决方法

首先明确问题核心:相同查询条件直接调用模型可返回结果,使用prettus/l5-repository的Criteria查询无结果,可按照以下顺序排查:


排查步骤

1. 优先清除已有Criteria避免条件叠加

Repository默认会保留之前添加的所有Criteria条件,若之前有其他查询条件未清除,会和当前价格筛选条件叠加导致无匹配结果。调用前先重置Criteria:

// 先转成int避免浮点精度问题
$cents = [(int)($request->price * 100)];
// 清除之前所有Criteria
$this->repository->resetCriteria();
$this->repository->pushCriteria(new WhereInCriteria('price', $cents));
$result = $this->repository->paginate();

2. 修正价格转换的精度问题

用户输入的美元价格为浮点型,直接乘100可能出现浮点精度误差(比如0.1*100实际得到10.0000000001),如果数据库price字段为int类型,浮点值和int值匹配会失败。转换时强制转int即可解决。

3. 验证Repository绑定的模型是否正确

检查你当前使用的Repository类的$model属性,确认绑定的是Book::class,如果绑定到其他模型自然查询不到结果。

4. 对比生成的SQL定位差异

如果以上步骤都无法解决,打印两个查询的SQL语句直接对比差异:

// 打印直接调用模型的SQL
dd(Book::whereIn('price',$cents)->toSql(), Book::whereIn('price',$cents)->getBindings());
// 打印Repository生成的SQL
$this->repository->resetCriteria();
$this->repository->pushCriteria(new WhereInCriteria('price', $cents));
dd($this->repository->getQuery()->toSql(), $this->repository->getQuery()->getBindings());

两者的查询字段、绑定参数、额外where条件的差异就是问题所在。


内容的提问来源于stack exchange,提问作者user17426459

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 07:27:02