首页 > 解决方案 > 如何在 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. 我应该为此做些什么改变?

标签: sqllaravellaravel-5eloquentlaravel-5.6

解决方案


您正在这里处理对象,您应该使用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()

推荐阅读