2012-10-23 21 views
3

我正在將zf1應用程序移動到zf2,並且我在移動映射器時遇到了很多問題。 顯然,我不能只是複製/過去我的查詢(!太糟糕了)如何在ZF2中的連接sql請求中使用CONCAT

我試圖使用CONCAT在加入像

$resultSet = $this->select(function (Select $select) use($userId, $filter, $status){ 

$select->columns(array("id_project", "name", "current_to", "avancement")); 
$prj = "PRJ_"; 
$select->join(array("ru" => "role_users"), "CONCAT($prj , projects.id_project) = ru.element", array()) 
        ->where("ru.user_id = $userId"); 

如果我打印$select->getSqlString(),我得到:

SELECT "projects"."id_project" AS "id_project", "projects"."name" AS "name", 
    "projects"."current_to" AS "current_to", "projects"."avancement" AS "avancement" FROM 
"projects" INNER JOIN "role_users" AS "ru" ON "CONCAT"("PRJ_" "," "projects"."id_project" 
) = "ru"."element" WHERE ru.user_id = 3 

Apport會爲所有的「」,這是正確的(如果我刪除所有「」,並在phpMyAdmin執行它,它的工作原理 但是,如果ZF2正在執行它,我得到一個錯誤:

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 '`projects`.`id_project`) = `ru`.`element` 
WHERE ru.user_id = 3' at line 1 

看起來像CONCAT()有問題,但我找不到問題所在。

回答

0

這個我覺得不是很優雅,但它的工作原理:

$select->join(array("ru" => "role_users"), 
new Expression("CONCAT($prj , projects.id_project) = ru.element"), array()) 
->where("ru.user_id = $userId"));