2012-09-26 13 views
5

मैं सच में बात कैसे Zend फ्रेमवर्क में विधेय उपयोग करने के लिए नहीं मिलता है में विधेय का उपयोग कर 2.zf2 Zend Db Sql Sql जहां हालत

इस मैं क्या मिल गया है:

$sql->select() 
     ->columns(array('GroupedColum' 
      ,'minValue' => new Expression('min(ValueColumn)'))) 
     ->from('ValueTable') 
     ->group('GroupedColum') 
     ->order('minValue') 
     ->order('GroupedColum') 
     ->limit(10); 

इस ठीक काम कर रहा है

अब मैं उस तरह किसी चीज़ लागू करना चाहते हैं:

$predicate = new Zend\Db\Sql\Predicate\Predicate(); 
$sql->where($predicate->greaterThan('filterColumn','20); 

इस मैं क्या करने की कोशिश की है, यह कोई एर फेंकता आप जानते हैं कि कैसे तो

select GroupedColum 
    , min(ValueColumn) as minValue 
from ValueTable 
where filterColumn > 20 
group by GroupedColum 
order by minValue 
    GroupedColum 
limit 10; 
+0

आप जवाब के रूप में अपने समाधान जोड़ना चाहिए। – Xerkus

+0

किया, सलाह के लिए धन्यवाद! – RomanKonz

उत्तर

9

मैं zf2

के स्रोत कोड देखकर द्वारा समस्या को हल किया है: ROR, लेकिन यह

यह :-(काम नहीं कर रहा मैं क्या एसक्यूएल के रूप में की उम्मीद है ऐसा करने के लिए, यह वास्तव में आसान है, उपरोक्त कोड लगभग सही था!

के बजाय

$predicate = new Zend\Db\Sql\Predicate\Predicate(); 

आप

$predicate = new \Zend\Db\Sql\Where(); 

यह है एक खाली व्युत्पन्न वर्ग, कि Zend \ Db \ Sql \ Sql

में प्रयोग किया जाता है का उपयोग करने के लिए इस है पूर्ण कार्य उदाहरण:

$sql->select() 
    ->columns(array('GroupedColum' 
     ,'minValue' => new Expression('min(ValueColumn)'))) 
    ->from('ValueTable') 
    ->group('GroupedColum') 
    ->order('minValue') 
    ->order('GroupedColum') 
    ->limit(10); 
$predicate = new \Zend\Db\Sql\Where(); 
$sql->where($predicate->greaterThan('filterColumn','20')); 
6

थोड़ा देर से लेकिन आप यह भी

$sql->select() 
->columns(array('GroupedColum' 
    ,'minValue' => new Expression('min(ValueColumn)'))) 
->from('ValueTable') 
->group('GroupedColum') 
->order('minValue') 
->order('GroupedColum') 
->limit(10) 
->where 
    ->greaterThan('filterColumn', '20'); 

\ Zend \ Db \ Sql \ चयन की __get जादू विधि करके ऐसा कर सकते हैं जहां जो वर्तमान जहां() विधेय है, जो की अनुमति देता है रिटर्न के लिए एक मामला है आप इस तरह के

$sql->where 
    ->greaterThan('filterColumn', '20') 
    ->or 
    ->greaterThan('filterColumn', '30'); 

बनाम

$predicate = new \Zend\Db\Sql\Where(); 
$sql->where($predicate->greaterThan('filterColumn', '20')); 
$sql->where($predicate->greaterThan('filterColumn', '30'), 'OR'); 

एक सब विधेय के उपलब्ध जेडएफ 2 में (2.1.0) टी से सूची के लिए के रूप में और अधिक जटिल काम करने के लिए वह विधेय कहां:

+0

@Pang अद्यतन संदर्भित संस्करण में, ध्यान दें कि इस पोस्टिंग के समय से ZF2 महत्वपूर्ण रूप से बदल गया है। – fyrye

संबंधित मुद्दे