Doctrine запрос возвращает только одну строку? - PullRequest
2 голосов
/ 04 октября 2010

Я новичок в Doctrine, но немного знаком с SQL. У меня есть очень простая схема с пользователями и вызовами. Каждый вызов имеет «идентификатор претендента» и «идентификатор оппонента», которые являются внешними ключами в таблице пользователей. Я хочу напечатать список всех проблем, с выводом, являющимся именами из таблицы User. Вот мой запрос Учения;

$q = Doctrine_Query::create()
        ->select('u1.name challenger, u2.name opponent')
        ->from('Challenge c')
            ->leftJoin('c.Challenger u1')
            ->leftJoin('c.Opponent u2');

Проблема в том, что это возвращает только одну строку. Я использовал команду getSqlQuery (), чтобы посмотреть на сгенерированный SQL, который в итоге выглядит так:

SELECT u.name AS u__0, u2.name AS u2__1 FROM challenge c 
LEFT JOIN user u ON c.challenger_id = u.id 
LEFT JOIN user u2 ON c.opponent_id = u2.id

При запуске в стороннем клиенте SQL этот запрос извлекает все строки, как и ожидалось. Любая идея, как я могу получить все строки из Доктрины? Я использую $q->execute(), который, как я понимаю, должен работать для нескольких строк.

Спасибо.

Ответы [ 4 ]

5 голосов
/ 15 ноября 2011

Для меня это сработало путем изменения режима увлажнения:

$result = $query->execute(array(), Doctrine_Core::HYDRATE_SCALAR);

Установить набор результатов, а затем вернуть массив вместо объектов.

2 голосов
/ 12 августа 2011

Я только что столкнулся с этой проблемой, и в моем случае проблема заключалась в том, что мой запрос не выделил ни одного поля из таблицы FROM.Пример:

$query = Doctrine_Query::create()
            ->select(
                'ghl.id as id,
                ghl.patbase_id as patbase_id,
                ghl.publication_no as publication_no,
                ghl.priority_no as priority_no
                '
            )
            ->from('GridHitListContents ghlc')
            ->leftJoin('ghlc.GridHitList ghl')

Как видите, в таблице GridHitListContents нет выделенного поля.с $ query-> count () я получил 2000-ые результаты, но с $ query-> fetchArray () только первый.Когда я добавил

$query = Doctrine_Query::create()
            ->select(
                'ghlc.id,
                ghl.id as id,
                ...
                '
            )
            ->from('GridHitListContents ghlc')
            ->leftJoin('ghlc.GridHitList ghl')

, я вернул все свои результаты.

1 голос
/ 17 ноября 2015

$query->fetchOne() отлично работает для меня.

0 голосов
/ 13 ноября 2012

Используйте это $result = $q->execute(array(), Doctrine_Core::HYDRATE_ARRAY)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...