Почему в Symphony 2 Doctrine при запросах через createQueryBuilder или createQuery с getResult или getArrayResult возвращает только одну запись БД?
Приветствую всех.
Нужна помощь в следующей ситуации.
Ситуация:
Пришлось возвращаться к давнишнему проекту на Symphony 2.4. Там проблема: при поиске по БД через разные формы запросов - createQueryBuilder или createQuery и сборкой их в getResult или getArrayResult почему-то выдается только одна ( первая ) запись из БД, хотя в БД sql-запросом констатируется больше одной записи.
Вопрос:
кто сталкивался с подобной проблемой, подскажите как решить проблему? Пробовал применять еще getScalarResult - здесь выдает нужные объекты, но пакует их в разные массивы, в кол-ве сопряженных объектов других таблиц, связанных через маппинг. Фишка еще в том, что подобные запросы createQuery используются в проекте, например, для
получения ВСЕХ записей таблицы или с несколькими параметрами - все отлично работает.
я ставлю на то, что где-то условие не то, сделайте getQuery()->getSql(); и посмотрите точно ли нужный вам запрос прилетает и точно нужные параметры в него вставляются
Максим Федоров, Приветствую.
Спасибо за подсказку. Попробовал $query->getSql() и $query->getParameters() - все нормально, запрос без ошибок.
Обнаружил следующее:
при запросе без JOIN-ов в createQuery getResult() все равно выдает 1 запись из БД ( записей должно быть 3 ), при тех же условиях, но уже getArrayResult() - выдает 3 записи ( как и должно быть ). Как только в запрос добавляю JOIN ( LEFT JOIN ), а мне обязательно нужно вытягивать сопряженные через маппинг данные из других таблиц, getArrayResult() возвращает 1 запись. В маппинге используются сущности ( Entity ), которые присутствуют в других различных запросах проекта и запросы возвращают правильное кол-во записей, т.е. типы отношений между сущностями прописаны и работаю верно, а здесь какой-то непонятный затык происходит. В какую сторону копать? Спасибо.
экспериментировал с запросом без строк с LEFT JOIN - все равно возвращает 1 запись, может у меня глаз замылился и не замечаю в коде очевидную ошибку.
Спасибо.
BoShurik, нет, не уникальное - может повторяться сколько угодно раз, и именно поэтому в приведенном примере должно возвращаться 3 записи, а возвращается одна запись
Хороший вопрос и без ответа. Ебитесь как хотите называется, хотя по сути явно просто что-то в параметрах надо передать что бы Доктрина правильно отдала.