2013-12-12 25 views
0

我想在Symfony的檢索與本地查詢對象2檢索對象與nativeQuery在Symfony2中

我的代碼是:

$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 

我的表名sn_user並在我的實體SNUserBundle:用戶有這個註釋

* @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

+0

不應該查詢像'選擇u.nickname FROM sn_userüWHERE u.nickname =?'你需要正確別名表。我不知道這是否是主要問題,但似乎是一個問題。 – keyboardSmasher

+0

@keyboardSmasher不過謝謝,我忘了 – Barno

回答

2

我認爲你是SQL和DQL,或使用每個功能混合起來。它看起來像你想使用DQL來查詢,這將返回一個對象。在這種情況下,您不要使用createNativeQuery方法。這個方法如果適用於SQL。

有關如何使用DQL查詢的示例,請參閱Symfony docs on 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(); 

請遵循此語法,並且您應該沒問題。

0

我解決這樣

$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;