开发者

Doctrine query only returning one row?

I'm new to Doctrine but somewhat familiar with SQL. I have a very simple schema with Users and Challenges. Each Challenge has a "challenger id" and a "opponent id" which are foreign keys into the User table. I want to print a list of all challenges, with the output being the names from the User table. Here is my Doctrine query;

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

The p开发者_JAVA技巧roblem is that this only returns one row. I've used the getSqlQuery() command to look at the generated SQL which ends up being:

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

When run in a 3rd party SQL client this query retrieves all of the rows as expected. Any idea how I can get all of the rows from Doctrine? I'm using $q->execute() which I understand should work for multiple rows.

Thanks.


For me it worked by chaning the hydration mode:

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

Set result set then returns an array instead of objects.


I just ran into this issue and in my case the problem was that my query didn't select any field from the FROM table. Example:

$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')

As you can see there is no selected field from the GridHitListContents table. with a $query->count() I got 2000ish results, but with $query->fetchArray() only the first one. When I added

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

I got back all my results.


$query->fetchOne() work fine for me.


Use this $result = $q->execute(array(), Doctrine_Core::HYDRATE_ARRAY)

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜