2013-03-22 7 views
5

Korzystam z Zend Framework 2.x i stoi w obliczu problemu, ponieważ mam dużo wyszukiwania. Chcę użyć takiego postanowienia do zapytania, ale za każdym razem daje błędy:, podobnie jak w przypadku kwerendy w Zend Framework 2

Oto moje wysiłki:

$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; 

ale daje to błąd:

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

Mam również używany Zend \ Db \ Sql \ Predicate, ale to również daje błąd.

Więc moje pytanie jest to, że

  1. jak używać takiego klauzuli kwerendy w Zend Framework 2?
  2. Co jest problemem w moim kodzie?

Prosimy o odpowiedź wkrótce, ponieważ jest to pilne.

+0

nie jestem zbyt obeznany z 'Zend \ Db', ale można spróbować to:' oświadczenie $ = $ sql-> prepareStatementForSqlObject ($ select); $ result = $ instrukcja-> execute(); 'zamiast' $ select-> getSqlString() '? – Sam

+1

@Sam: tak, użyłem tego, to jest używane, aby uzyskać wyniki. –

Odpowiedz

11

Spróbuj tego

$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

używam tak pomoże mi dostać się dużo prostsze.

<?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

Możesz użyć Predicatora, aby używać Like.

use Zend\Db\Sql\Predicate\Like 

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

$select->where($where); 

Uwaga: Aby używać nie jak, zamiast tego można użyć literału.

$where->literal('my_field NOT LIKE ?', '%' . $test . '%');