【问题标题】:Doctrine2 Native Query ManyToManyDoctrine2 原生查询多对多
【发布时间】:2012-11-30 21:36:33
【问题描述】:

我已阅读有关本机 sql 查询的 Doctrine2 文档。 它没有谈论通过多对多关系加入的实体。 我不知道如何处理,任何想法或示例。

【问题讨论】:

    标签: php mysql symfony doctrine-orm


    【解决方案1】:

    您只需手动将连接表添加到 sql 中。扩展 Doctrine 手册第 14 章中的示例:

    $rsm = new ResultSetMapping;
    $rsm->addEntityResult('User', 'u');
    $rsm->addFieldResult('u', 'id', 'id');
    $rsm->addFieldResult('u', 'name', 'name');
    $rsm->addJoinedEntityResult('Address' , 'a', 'u', 'address');
    $rsm->addFieldResult('a', 'address_id', 'id');
    $rsm->addFieldResult('a', 'street', 'street');
    $rsm->addFieldResult('a', 'city', 'city');
    
    $sql = 'SELECT u.id, u.name, a.id AS address_id, a.street, a.city FROM users u ' .
           'INNER JOIN address__user j ON u.id = j.user '.
           'INNER JOIN address a ON a.id = j.address '.
           'WHERE u.name = ?';
    $query = $this->_em->createNativeQuery($sql, $rsm);
    $query->setParameter(1, 'romanb');
    
    $users = $query->getResult();
    

    此示例假设您的联接表具有字段地址和用户作为其键。

    【讨论】:

    • @Lighthart 您的查询有问题。您正在为多个表使用“j”别名。为什么在连接之间使用“AND”?
    • 已修复。由于这已经超过一年了,我认为 OP 只是简单地纠正了他自己代码中的模拟。
    猜你喜欢
    • 2015-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多