Symfony 2 доктрина 2 - PullRequest
       0

Symfony 2 доктрина 2

1 голос
/ 11 декабря 2011

Я создаю метод для выбора текущего помещения фото, все работает хорошо

public function findByDistrictIds($criteria)
{
    $q = $this->getEntityManager()->
            createQuery('SELECT f.id, f.path FROM RealestateCoreBundle:Foto f WHERE f.premises in (:criteria)');
    $q->setParameter('criteria', $criteria);
    return $q->getResult();
}

, но когда я добавляю команду select "f.premises", получаю ошибку

[СемантическаяОшибка] строка 0, столбец 23 рядом с «помещением ОТ»: Ошибка: неверное выражение пути.Должно быть StateFieldPathExpression.

Как я могу получить фото с housing_id?И как использовать предложение "WHERE IN" в queryBuilder?

Ответы [ 3 ]

1 голос
/ 11 декабря 2011

Ах. Это появилось недавно. Предпосылки - это поле отношений, поэтому вам нужно выполнить выборочное соединение. Обратите внимание на псевдоним Помещения p в списке полей:

SELECT f.id, f.path, p 
  FROM RealestateCoreBundle:Foto f 
  JOIN f.premises p 
 WHERE ...

Надеюсь, это поможет:)

0 голосов
/ 01 апреля 2014

Что касается WHERE IN в построителе запросов, вы можете передать $criteria в виде массива методу setParameter(). Также убедитесь, что массив находится в этом формате.

$criteria = array('1','2','3'); /* correct */

$criteria = array('1,2,3'); /* incorrect. Some people misunderstand this and set the array like this which is incorrect */

Итак, ваш запрос будет выглядеть примерно так:

$q = $this->getEntityManager()->
        createQuery('
                    SELECT f.id, f.path FROM RealestateCoreBundle:Foto f 
                    WHERE f.premises in (:criteria)');
$q->setParameter('criteria', array('1','2','3'));

Надеюсь, это поможет.

0 голосов
/ 10 марта 2014
public function findByDistrictIds($criteria)
{
    $q = $this->getEntityManager()->
    createQuery('SELECT f.id, f.path FROM RealestateCoreBundle:Foto f WHERE f.premises =     :criteria');
    $q->setParameter('criteria', $criteria);
    return $q->getResult();
}

Вы можете попробовать использовать f.premises = :criteria
вместо f.premises in (:criteria)

...