Mapping 如何使用原则2管理视图?

Mapping 如何使用原则2管理视图?,mapping,doctrine-orm,sql-view,temp-tables,nativequery,Mapping,Doctrine Orm,Sql View,Temp Tables,Nativequery,我想用Doctrine2映射sql视图 此视图是一个很有诱惑力的视图,其中包含一些统计信息,无需重写生成该视图的sql即可显示这些统计信息 我尝试像表一样映射,但是更新模式会删除视图并创建一个表 我也尝试使用NativeSQL public function getMessages(\Project\Bundle\MyBundle\Entity\User $user) { $rsm = new \Doctrine\ORM\Query\ResultSetMapping(); $rs

我想用Doctrine2映射sql视图

此视图是一个很有诱惑力的视图,其中包含一些统计信息,无需重写生成该视图的sql即可显示这些统计信息

我尝试像表一样映射,但是更新模式会删除视图并创建一个表

我也尝试使用NativeSQL

public function getMessages(\Project\Bundle\MyBundle\Entity\User $user) {
    $rsm = new \Doctrine\ORM\Query\ResultSetMapping();
    $rsm->addEntityResult('MessageCenter', 'v');
    $rsm->addFieldResult('v', 'user_id', 'user_id');
    $rsm->addFieldResult('v', 'tot', 'tot');
    $rsm->addFieldResult('v', 'read', 'read');
    $rsm->addFieldResult('v', 'to_read', 'to_read');
    $rsm->addFieldResult('v', 'stored', 'stored');
    $rsm->addFieldResult('v', 'spam', 'spam');

    $q = "SELECT * FROM message_stats_view WHERE user_id = ?";
    $rsm = new \Doctrine\ORM\Query\ResultSetMapping;
    $query = $this->getEntityManager()->createNativeQuery($q, $rsm);
    $query->setParameter(1, $user->getId());
    echo $query->getSQL();
    var_dump($query->execute());
    exit;
}
我使用getter和setter创建实体MessageCenter,但我的输出是:

SELECT * FROM message_stats_view WHERE user_id = ?
array
  empty
(由aq问题编辑中的OP回答。转录到社区wiki答案。请参阅)

OP写道:

我解决了

这将返回一个数组。太好了


顺便说一句:在使用$rsm之前,您正在覆盖它。。
public function getCentroMessaggi(\Project\Bundle\MyBundle\Entity\User $user) {
    $connection = $this->getEntityManager()->getConnection();
    $q = "SELECT * FROM message_stats_view WHERE user_id = :id";
    $stmt = $connection->executeQuery($q, array('id' => $user->getId()));
    return $stmt->fetch();
}