sql - 如何在 Laravel 的循环中替换查询条件?
问题描述
我有一张user
桌子,上面有名字、状态和距离。我想获得特定的用户distance
,如果结果为空,我想用递增的值再次检查它。
$user = User::where('status',1);
$i = 10;
while($i < 50)
{
$user->having('distance', '<=', $i);
if($user->get()->count())
break;
$i = $i+5;
};
在第一个循环中,我将查询正确地作为SELECT * from users where status = 1 and having distance <= 10
. 如果在第二个循环中结果为空,我将查询作为SELECT * from users where status = 1 and having distance <= 10 and having distance <= 15
. 我想将查询作为SELECT * from users where status = 1 and having distance <= 15
. 我应该为此做些什么改变?
解决方案
您正在这里处理对象,您应该使用clone
:
$user = User::where('status',1);
$i = 10;
while($i < 50)
{
$query = (clone $user)->having('distance', '<=', $i);
if($query->get()->count())
break;
$i = $i+5;
}
此外,您正在使用:
$query->get()->count()
是什么原因导致您从数据库中获取所有匹配查询的记录并计算它们的数量。如果您只需要计数,最好只使用:
$query->count()
推荐阅读
- python - 语音识别无法识别我的声音
- docker - 节点容器无法连接到 Ubuntu 21.04 上的 MariaDB 容器
- ruby - Ruby - 语法错误,意外的 tIDENTIFIER,期待结束
- angular - 每个项目的组件“应该创建”测试都失败,并出现错误“无法将 @Input 装饰器与查询装饰器结合起来”
- jmx - Apache Artemis listMessages MBean 操作始终不返回任何内容
- python-3.x - 如何在 AWS Glue 作业 ETL 中定义具有外键关系的 ETL 脚本
- amazon-web-services - 使用Nginx反向代理访问amazon polly
- powershell - -Match 开关未按预期工作
- python - 通过迭代django模型动态获取模型对象值
- apache-spark - Spark withWatermark,仅存储间隙前后的值