代码之家  ›  专栏  ›  技术社区  ›  LVB

条令查询只返回一行?

  •  2
  • LVB  · 技术社区  · 14 年前

    我不熟悉理论,但对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() 据我所知,它应该适用于多行。

    谢谢。

    4 回复  |  直到 9 年前
        1
  •  5
  •   ownking    13 年前

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

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

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

        2
  •  2
  •   Leonardo Rossi    13 年前

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

    我把所有的结果都拿回来了。

        3
  •  1
  •   bfontaine cat-walk    9 年前

    $query->fetchOne() 为我工作很好。

        4
  •  0
  •   Manuel Serrano    12 年前

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