Как заменить условия запроса в цикле в Laravel? - PullRequest
0 голосов
/ 04 сентября 2018

У меня есть 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 голосов
/ 04 сентября 2018

Вы работаете здесь над объектами, и вы должны использовать 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()
...