2014-09-04 60 views
1

有一個本地查詢,我想執行的Symfony2的原生MySQL查詢,但我得到一個SQL錯誤,這是原始查詢:問題與Symfony2的

$sql= "SELECT s.id_tariffs_key,s.description,s.voice_rate 
    FROM tariffs s 
    JOIN (SELECT MAX(id_tariffs_key) AS id FROM tariffs GROUP BY description) max 
    ON s.id_tariffs_key = max.id 
    WHERE s.description like '$letter%' and s.description not like '%-%'"; 

這是Symfony2的查詢:

$rsm = new ResultSetMapping; 
    $rsm->addEntityResult('MyBundle:Tariffs', 't'); 

    $query = $this->getEntityManager()->createNativeQuery("SELECT t.id_tariffs_key,t.description,t.voice_rate FROM tariffs 
     JOIN (SELECT MAX(t.id_tariffs_key) AS id FROM tariffs GROUP BY t.description) max ON id_tariffs_key = max.id 
     t.description like '?%' and t.description not like '%-%'", $rsm); 
    $query->setParameter(1, $letter); 

當我嘗試加載網頁,它說:

An exception occurred while executing 'SELECT t.id_tariffs_key,t.description,t.voice_rate FROM tariffs 
JOIN (SELECT MAX(t.id_tariffs_key) AS id FROM tariffs GROUP BY description) max ON id_tariffs_key = max.id 
t.description like '?%' and t.description not like '%-%'' with params [23]: 

SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 't.description like '?%' and t.description not like '%-%'' at line 3 

任何幫助,請?

謝謝!

回答

1

你把你的查詢嚴重地翻譯成了Doctrine,包括忘記WHERE聲明。

這裏是我的學說查詢的固定版本

$query = $this->getEntityManager()->createNativeQuery(
    "SELECT t.id_tariffs_key, t.description, t.voice_rate 
    FROM tariffs t 
    JOIN (
     SELECT MAX(id_tariffs_key) AS id 
     FROM tariffs 
     GROUP BY description 
    ) max ON id_tariffs_key = max.id 
    WHERE t.description LIKE ? AND t.description NOT LIKE '%-%'", 
    $rsm); 
$query->setParameter(1, $letter.'%');