Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Doctrine 是否只返回一行?_Doctrine - Fatal编程技术网

Doctrine 是否只返回一行?

Doctrine 是否只返回一行?,doctrine,Doctrine,我不熟悉这个理论,但对SQL有点熟悉。我有一个关于用户和挑战的非常简单的模式。每个挑战都有一个“挑战者id”和一个“对手id”,它们是用户表中的外键。我想打印所有挑战的列表,输出为用户表中的名称。这是我的教义质疑 $q = Doctrine_Query::create() ->select('u1.name challenger, u2.name opponent') ->from('Challenge c') ->lef

我不熟悉这个理论,但对SQL有点熟悉。我有一个关于用户和挑战的非常简单的模式。每个挑战都有一个“挑战者id”和一个“对手id”,它们是用户表中的外键。我想打印所有挑战的列表,输出为用户表中的名称。这是我的教义质疑

$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()
,我知道它应该适用于多行


谢谢。

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

我得到了我所有的结果。

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

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

Set result Set然后返回一个数组而不是对象。

使用这个
$result=$q->execute(array(),Doctrine\u Core::hydrome\u array)
$query->fetchOne()
对我来说很好。

试试$q->count(),看看它说得到多少行。另外,使用_dev.php访问查询。运行后,单击数据库,查看它实际运行的查询。不过,我不确定这与getSqlQuery()返回的有什么不同。谢谢$q->count()表明查询返回的结果数量正确,我需要了解DoctrineCollection对象的正确用法。这超出了我的问题范围,因此我将结束它。太棒了,欢迎您将我的评论标记为“伟大”评论;)我这样做了,并且成功了,但是所有字段都以我选择的第一个表的别名作为前缀。这也解决了我的问题。我在SQL中运行了一个
表。*
,但它将结果合并,并返回一行。包括一个
table.id作为table\u id,table.*
作为select返回所需的每一行。