запрос доктрины с параметрами, имеющими несколько значений - PullRequest
0 голосов
/ 19 октября 2018

Я хочу сделать запрос доктрины, в котором каждый параметр может иметь несколько значений (исходя из нескольких выбранных).

У меня есть таблица с параметром 'type', который может иметь значение 1, 2, 3 или 4 и параметр «онлайн», который может быть 0 или 1.

Пока мой запрос следующий:

$query = $this->createQueryBuilder('properties');

if (array_key_exists('type', $searchValues)) {

    $types = $searchValues['type'];
    $iterator = 0;

    foreach ($types as $type) {

        if ($iterator == 0) {

            $query->andWhere('properties.idPropertyType = ' . $type);

        } else {

            $query->orWhere('properties.onlineProperties = ' . $type);

        }

            $iterator++;

        }
    }

if (array_key_exists('status', $searchValues)) {

    $status = $searchValues['status'];
    $iterator = 0;

    foreach ($status as $statu) {

        if ($iterator == 0) {

            $query->andwhere('properties.onlineProperties = ' . $statu);

        } else {

            $query->andWhere('properties.onlineProperties = ' . $statu);

        }

        $iterator++;

    }

}

$properties = $query->getQuery()->getResult();

В случае поиска с параметром type =1 и в режиме онлайн = 0 и 1, у меня есть результаты, где тип - это значение, отличное от 1. Я понимаю причину, но не могу найти правильный способ сделать мой запрос.

1 Ответ

0 голосов
/ 19 октября 2018

Вам не нужно создавать запрос вручную, просто используйте функцию (in) из класса QueryBuilder.Попробуйте это:

$query = $this->createQueryBuilder('properties');

if(array_key_exists('type', $searchValues)){
    $types = $searchValues['type'];
    $query->andWhere($query->expr()->in('properties.idPropertyType', $types));
}

if(array_key_exists('status', $searchValues)){
    $status = $searchValues['status'];
    $query->andwhere($query->expr()->in('properties.onlineProperties', $status));
}

$properties = $query->getQuery()->getResult();
...