Php 就像zend framework 2中的where查询一样
我正在使用ZendFramework2.x,并且面临着这个问题,因为我已经搜索了很多。 我想在查询中使用like子句,但每次都会出现错误: 以下是我的努力: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(
$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,但这也给出了错误 所以我的问题是
$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:是的,我用过,这是用来获取结果的。