Doctrine2:使用NativeQuery和ResultSetMapping进行查询

时间:2015-03-28 00:25:50

标签: mysql sql symfony doctrine

我在自定义存储库symfony 2类中有这些代码,我很难理解为什么$ results总是为空。
MyApplicationBundle:Archive是映射到DB
集合的实体类是一个连接表(ManyToMany)而不是实体
当前不是这个类的属性但是我需要它在结果中$ $ where_str是在上面构建的,我做错了什么?谢谢

    $rsm = new ResultSetMapping();
    $rsm->addEntityResult('MyApplicationBundle:Archive', 'a');
    $rsm->addFieldResult('a', 'id', 'id');
    $rsm->addFieldResult('a', 'author', 'author');
    $rsm->addFieldResult('a', 'title', 'title');
    $rsm->addFieldResult('a', 'present', 'present');

    $sql = "select
              a.id,
              a.author,
              a.title,
              IF((select c.archive_id from collection c where c.archive_id = a.id and c.user_id = :user),1,0) as present
            from
              archive a
            where
              $where_str";

    $em = $this->getEntityManager();

    $query = $em->createNativeQuery($sql, $rsm);
    $query->setParameters($arrParameters);

    $results = $query->getResult();

    return $results;
如果更好的话,

非常乐意尝试使用DQL或DQB。

1 个答案:

答案 0 :(得分:0)

经过一番尝试,我发现上面的代码是正确的。我只需要在Archive实体中添加“present”字段,创建getter和setter(doctrine:generate:entities)并更新DB以在表中创建字段(doctrine:schema:update --force)。无论你是否打算在其他任何地方使用它。