2013-03-22 6 views
5

में क्वेरी में है, मैं ज़ेंड फ्रेमवर्क 2.x का उपयोग कर रहा हूं और समस्या का सामना कर रहा हूं क्योंकि मैंने बहुत कुछ खोजा है। मैं क्वेरी में तरह खंड का उपयोग करना चाहते लेकिन हर बार त्रुटियों देता है:जहां ज़ेंड फ्रेमवर्क 2

यहाँ मेरी प्रयासों है:

$sql = new Sql($this->adapter); 
$select = $sql->select()->columns(
array('user_profile_id', 'profile_login_name'))->from($this->table)->where->like(
     'profile_login_name', '%'.$strSearch.'%'); 
echo $select->getSqlString(); die; 

लेकिन इस त्रुटि देता है:

Fatal error: Call to undefined method Zend\Db\Sql\Where::getSqlString() in /var/www/YAAB/branches/admin/models/Model/UserTable.php on line 131

मैं भी इस्तेमाल किया है ज़ेंड \ डीबी \ एसक्यूएल \ भविष्यवाणी लेकिन यह त्रुटि भी देता है।

तो मेरे सवाल है कि

  1. कैसे Zend फ्रेमवर्क 2 में क्वेरी में तरह खंड का उपयोग कर रहे हैं?
  2. मेरे कोड में समस्या क्या है?

कृपया उत्तर दें जैसे ही यह जरूरी है।

+0

मैं 'Zend \ Db' साथ भी परिचित नहीं हूँ, लेकिन आप इस कोशिश कर सकते: ($ चुनें)' $ बयान = $ sql-> prepareStatementForSqlObject; $ परिणाम = $ कथन-> निष्पादित करें(); '$ select-> getSqlString()' के बजाय '? – Sam

+1

@ सैम: हाँ मैंने इसका उपयोग किया है, इसका उपयोग परिणाम प्राप्त करने के लिए किया जाता है। –

उत्तर

11

$select = $sql->select(); // or new Select('table'); 
$where = new \Zend\Db\Sql\Where(); 

// Using predicates 
$where->addPredicate(
    new \Zend\Db\Sql\Predicate\Like('my_field', '%test%') 
); 

// Alternatively, a shortcut 
$where->like('my_field', '%test%'); // Alternatively, a shortcut. 

$select->where($where); 

// this part will depend on if you're using TableGateway or what ever 

$stmt = $sql->prepareStatementForSqlObject($select); 
$resultSet = new ResultSet(); 
$resultSet->initialize($stmt->execute()); 
6

मैं उस तरह का उपयोग मेरी मदद बहुत सरल पाने के लिए होगा बाहर इस कोशिश करो।

<?php 

    namespace WebApp\Table; 

    use Zend\Db\TableGateway\TableGateway; 
    use Zend\Db\Sql\Where; 
    use Zend\Db\Sql\Sql, 
     Zend\Db\Adapter\Adapter; 
    use Zend\Db\Sql\Expression; 

    class ClassName 
    {  

     public function sidebarJobByUser(\WebApp\Entity\User $user) 
      { 
       $userId = $user->getId(); 
       $adapter = $this->tableGateway->getAdapter(); 
       $sql  = new Sql($adapter); 

       $select = $sql->select(); 
       $select->from($this->table) 
         ->columns(array('user_profile_id', 'profile_login_name')) 
         ->where->like('profile_login_name', '%'.$strSearch.'%'); 

       $statement = $sql->getSqlStringForSqlObject($select); 
       $results = $adapter->query($statement, $adapter::QUERY_MODE_EXECUTE); 

       return $results; 
      } 
    } 
14

आप पसंद करने के लिए प्रिडिकेटर का उपयोग कर सकते हैं।

use Zend\Db\Sql\Predicate\Like 

$where = new Where(); 
$where->like('my_field', '%' . $test . '%'); 

$select->where($where); 

नोट: और पसंद नहीं करने के लिए, आप इसके बजाय लिटल का उपयोग कर सकते हैं।

$where->literal('my_field NOT LIKE ?', '%' . $test . '%'); 
संबंधित मुद्दे