2013-03-22 6 views
5

Ich benutze das Zend-Framework 2.x und mit dem Problem konfrontiert, wie ich viel habe. Ich möchte ähnliche Klausel in Abfrage verwenden, aber jedes Mal gibt die Fehler:wie in wo Frage in Zend Framework 2

Hier ist meine Bemühungen:

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

aber das gibt den Fehler:

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

ich auch verwendet haben Das Zend \ Db \ Sql \ Prädikat gibt aber auch den Fehler.

Also meine Frage ist, dass

  1. wie dergleichen Satz 2 in Zend Framework in Abfrage benutzen?
  2. Was ist ein Problem in meinem Code?

Bitte antworten Sie bald, da es dringend ist.

+0

Ich bin nicht allzu vertraut mit 'Zend \ Db', aber könnten Sie versuchen, diese:' $ statement = $ SQL-> prepareStatementForSqlObject ($ wählen); $ results = $ statement-> execute(); 'anstelle von $ select-> getSqlString()'? – Sam

+1

@Sam: ja ich habe das verwendet, das wird verwendet, um Ergebnisse zu erhalten. –

Antwort

11

dies ausprobieren

$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

ich so verwenden wird mich viel einfacher zu erhalten helfen.

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

Sie können Predicator verwenden, um Like zu verwenden.

use Zend\Db\Sql\Predicate\Like 

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

$select->where($where); 

Hinweis: Um Nicht Like zu verwenden, können Sie stattdessen Literal verwenden.

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