2015-04-29 39 views
0

我必須做一個SELECT,我將通過列idcontrato來區分行。我做得很好用SQL ...ZF2改變我的表達式並返回錯誤(Postgre,Distinct)

SELECT DISTINCT ON (idcontrato) * 
FROM cad_emprestimo 
WHERE numerobeneficio = '1135346515'; 

但是,當我試圖做同樣的ZF2:

$emprestimos = (new EmprestimoTable())->select(function(Select $select) use($cliente) { 
     $select->columns([new Expression('DISTINCT ON (idcontrato) *')]); 
     $select->where->equalTo('numerobeneficio', $cliente->getBeneficio()->getNumero()); 
}); 

我得到了以下錯誤:

SQLSTATE[42601]: Syntax error: 7 ERRO: erro de sintaxe em ou próximo a "AS" 
LINE 1: SELECT DISTINCT ON (idcontrato) * AS Expression1 FROM "cad_e... 
             ^

這' AS Expression1'由ZF2添加...我不知道如何刪除它。

回答

0

顯而易見的解決方案,我發現是運行原始SQL:

$dbAdapter  = GlobalAdapterFeature::getStaticAdapter(); 
    $numBeneficio = $cliente->getBeneficio()->getNumero(); 
    $sqlEmprestimos = "SELECT DISTINCT ON (idcontrato) * FROM cad_emprestimo WHERE numerobeneficio = '".$numBeneficio."'; "; 
    $dataSource  = $dbAdapter->createStatement($sqlEmprestimos)->execute(); 
    $emprestimos = (new \Zend\Db\ResultSet\ResultSet())->initialize($dataSource); 

無論如何,我不是很滿意這個,這個代碼是醜陋的地獄。

0

試試下面的代碼

$emprestimos = (new EmprestimoTable())->select(function(Select $select) use($cliente) { 
     $select->columns([new Expression('DISTINCT(idcontrato) AS idcontrato'), '*']); 
     $select->where->equalTo('numerobeneficio', $cliente->getBeneficio()->getNumero()); 
}); 
+0

如果我的回答是正確的,那麼標記它是正確的,以幫助其他人面臨同樣的問題。樂意效勞。 – Jayson

+0

我已經試過這個解決方案,但它只是重新排列colum idcontrato的結果分組。我需要隱藏重複的值,並且DISTINCT ON只顯示一行,如果已經顯示定義的列值。 'DISTINCT ON(idcontrato)* FROM ...'正是我所需要的。 反正謝謝你。 – hamboldt