Php 就像zend framework 2中的where查询一样

Php 就像zend framework 2中的where查询一样,php,zend-framework2,zend-db,Php,Zend Framework2,Zend Db,我正在使用ZendFramework2.x,并且面临着这个问题,因为我已经搜索了很多。 我想在查询中使用like子句,但每次都会出现错误: 以下是我的努力: $sql = new Sql($this->adapter); $select = $sql->select()->columns( array('user_profile_id', 'profile_login_name'))->from($this->table)->where->like(

我正在使用ZendFramework2.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/branchs/admin/models/Model/UserTable.php在线 131

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

所以我的问题是

  • 如何在zend framework 2中的查询中使用like子句
  • 我的代码有什么问题
  • 如果有紧急情况,请尽快回复。

    试试这个

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

    我用这样的方法会让我变得更简单

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

    您可以使用谓词来使用Like

    use Zend\Db\Sql\Predicate\Like
    
    $where = new Where();
    $where->like('my_field', '%' . $test . '%');
    
    $select->where($where);
    
    注意:要使用notlike,可以使用Literal

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

    我不太熟悉
    Zend\Db
    ,但是你能试试这个:
    $statement=$sql->prepareStatementForSqlObject($select)$结果=$statement->execute()
    而不是
    $select->getSqlString()
    ?@Sam:是的,我用过,这是用来获取结果的。