如何在doctrine 1.2中无关联地在两个表之间进行左连接

时间:2013-06-19 11:47:29

标签: symfony-1.4 doctrine-1.2

我有两张桌子。

Table invitations
Columns:
     id         email         created_at

Table orders
Columns:
     id         amount         email         created_at

我需要创建一个DQL来选择邀请表和左连接中的所有字段,并在电子邮件中显示订单表中所有记录的计数

注意我需要查看结果,所以我需要对结果进行分页,两个表之间没有关系

1 个答案:

答案 0 :(得分:1)

创建DQL查询:

$q = Doctrine_Query::create()
        ->select('i.*')
        ->from('invitations i')
        ->leftJoin('i.orders o ON i.email=o.email')
        ;

您可以添加更多条件:

->having('COUNT(email) > 10')
->groupBy('i.email')
->orderBy('i.email ASC');

打印结果SQL查询以检查错误:

echo $q->getSqlQuery();

执行DQL查询:

$vrows = $q->execute(array(), Doctrine_Core::HYDRATE_ARRAY); //For speed use Hydrate_Array, read the documentation about hydrating methods. If not specified you will get a list of records objects.


另一种方式就像ilSavo和Michal所说,创建自己的查询或在模式中写入这两个表之间的关系。

第三种方法是直接将SQL原始查询发送到数据库,而不使用ORM Doctrine:

$oConnection = Doctrine_Manager::getInstance()->getConnectionForComponent($sModuleName);
$vrecords = $oCurrentConnection->fetchAssoc($sSQLquery);


为了对结果进行分页,请查看here
记得使用try和catch来获得例外。