如何在Laravel中的循环中替换查询条件?

时间:2018-09-04 04:28:19

标签: sql laravel laravel-5 eloquent laravel-5.6

我有一个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。我应该为此做些什么改变?

1 个答案:

答案 0 :(得分:1)

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