Doctrine查询只返回一行?

时间:2010-10-04 00:35:00

标签: doctrine

我是Doctrine的新手,但对SQL有些熟悉。我有一个非常简单的架构,包含用户和挑战。每个Challenge都有一个“challenger id”和一个“opponent id”,它们是User表中的外键。我想打印所有挑战的列表,输出是User表中的名称。这是我的Doctrine查询;

$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客户端中运行时,此查询将按预期检索所有行。知道如何从Doctrine获取所有行吗?我正在使用$q->execute()我理解它应该适用于多行。

感谢。

4 个答案:

答案 0 :(得分:5)

对我来说,它通过改变水合模式起作用:

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

设置结果集然后返回一个数组而不是对象。

答案 1 :(得分:2)

我刚遇到这个问题,在我的情况下问题是我的查询没有从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')

我收回了所有结果。

答案 2 :(得分:1)

$query->fetchOne()对我来说很好。

答案 3 :(得分:0)

使用此$result = $q->execute(array(), Doctrine_Core::HYDRATE_ARRAY)