【问题标题】:like in where query in zend framework 2就像 zend 框架 2 中的 where 查询一样
【发布时间】:2013-09-10 15:33:53
【问题描述】:

我正在使用 Zend 框架 2.x 并面临问题,因为我进行了很多搜索。 我想在查询中使用 like 子句,但每次都给出错误:

这是我的努力:

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

但这给出了错误:

致命错误:调用未定义的方法 Zend\Db\Sql\Where::getSqlString() 在 /var/www/YAAB/branches/admin/models/Model/UserTable.php上线 131

我也使用了 Zend\Db\Sql\Predicate 但这也给出了错误。

所以我的问题是

  1. 如何在zend framework 2的查询中使用like子句?
  2. 我的代码有什么问题?

有紧急情况请尽快回复。

【问题讨论】:

  • 我对@9​​87654322@不太熟悉,但你可以试试这个:$statement = $sql->prepareStatementForSqlObject($select); $results = $statement->execute();而不是$select->getSqlString()
  • @Sam : 是的,我用过,这是用来获得结果的。

标签: php zend-framework2 zend-db


【解决方案1】:

试试这个

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

【讨论】:

    【解决方案2】:

    你可以使用Predicator来使用Like。

    use Zend\Db\Sql\Predicate\Like
    
    $where = new Where();
    $where->like('my_field', '%' . $test . '%');
    
    $select->where($where);
    

    注意:要使用 Not Like,您可以使用 Literal。

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

    【讨论】:

      【解决方案3】:

      我这样使用会帮助我变得更简单。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-09-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-08-13
        相关资源
        最近更新 更多