使用Symfony2中的nativeQuery检索对象

使用Symfony2中的nativeQuery检索对象,symfony,doctrine-orm,Symfony,Doctrine Orm,我想用Symfony 2中的本机查询检索一个对象 我的代码是: $rsm = new ResultSetMapping($this->getEntityManager()); $rsm->addEntityResult('SNUserBundle:User', 'u'); $rsm->addFieldResult('u', 'nickname', 'nickname'); $query = $this->getEntity

我想用Symfony 2中的本机查询检索一个对象

我的代码是:

$rsm = new ResultSetMapping($this->getEntityManager());
        $rsm->addEntityResult('SNUserBundle:User', 'u');
        $rsm->addFieldResult('u', 'nickname', 'nickname');

        $query = $this->getEntityManager()->createNativeQuery('SELECT u.nickname FROM u WHERE u.nickname = ?', $rsm);
        $query->setParameter(1, 'barno7');


        $users = $query->getResult();
我有这个错误

An exception occurred while executing 'SELECT u.nickname FROM u WHERE u.nickname = ?' with params ["barno7"]:

SQLSTATE[42S02]: Base table or view not found: 1146 Table 'sn.u' doesn't exist
我的表名SNU user和我的实体SNUserBundle:user中有此注释

 * @ORM\Table(name="sn_user")
我也试着

$query = $this->getEntityManager()->createNativeQuery('SELECT u.nickname FROM user WHERE u.nickname = ?', $rsm);
我的错误是

An exception occurred while executing 'SELECT u.nickname FROM users WHERE u.nickname = ?' with params ["barno7"]:

SQLSTATE[42S02]: Base table or view not found: 1146 Table 'sn.user' doesn't exist

我真正的表是sn_user

我想你把SQL和DQL或者使用它们的函数混为一谈了。看起来您希望使用DQL进行查询,这将返回一个对象。在这种情况下,不使用
createNativeQuery
方法。此方法适用于SQL

有关如何使用DQL进行查询的示例,请参见。以下是文档中的示例片段:

$em = $this->getDoctrine()->getManager();
$query = $em->createQuery(
    'SELECT p
    FROM AcmeStoreBundle:Product p
    WHERE p.price > :price
    ORDER BY p.price ASC'
)->setParameter('price', '19.99');

$products = $query->getResult();
按照这个语法,你应该会没事的。

我这样解决

$rsm = new ResultSetMapping;
    $rsm->addEntityResult('SNUserBundle:User', 'u');
    $rsm->addFieldResult('u', 'id', 'id');
    $rsm->addFieldResult('u', 'n', 'nickname');

    $query = $this->getEntityManager()->createNativeQuery('
    SELECT u.id ,u.nickname as n FROM sn_user u WHERE u.nickname LIKE = ?', $rsm);
    $query->setParameter(1, 'barno7');       

    $users = $query->execute();
    return $users;

查询是否应该类似于
SELECT u.nickname FROM sn\u user u,其中u.nickname=?
您需要正确地为表添加别名。我不知道这是否是主要问题,但这似乎是其中之一。@keyboardSmasher不,但谢谢,我忘了