Zend framework2 Zend 2-TableGateway Where子句
您好,我正在努力掌握Zend 2,我在表网关中的where子句方面遇到了一些问题 下面是我的课表:Zend framework2 Zend 2-TableGateway Where子句,zend-framework2,tablegateway,Zend Framework2,Tablegateway,您好,我正在努力掌握Zend 2,我在表网关中的where子句方面遇到了一些问题 下面是我的课表: //module\Detectos\src\Detectos\Model\OperatingSystemTable.php namespace Detectos\Model; use Zend\Db\TableGateway\TableGateway; class OperatingSystemsTable { public function findOs($userAgent)
//module\Detectos\src\Detectos\Model\OperatingSystemTable.php
namespace Detectos\Model;
use Zend\Db\TableGateway\TableGateway;
class OperatingSystemsTable
{
public function findOs($userAgent)
{
$resultSet = $this->tableGateway->select();
foreach ($resultSet as $osRow)
{
//check if the OS pattern of this row matches the user agent passed in
if (preg_match('/' . $osRow->getOperatingSystemPattern() . '/i', $userAgent)) {
return $osRow; // Operating system was matched so return $oses key
}
}
return 'Unknown'; // Cannot find operating system so return Unknown
}
}
模型是这样的:
class Detectos
{
public $id;
public $operating_system;
public $operating_system_pattern;
public function exchangeArray($data)
{
$this->id = (isset($data['id'])) ? $data['id'] : null;
$this->operating_system = (isset($data['operating_system '])) ? $data['operating_system '] : null;
$this->operating_system_pattern = (isset($data['operating_system_pattern'])) ? $data['operating_system_pattern'] : null;
}
public function getOperatingSystemPattern()
{
return $this->operating_system_pattern;
}
}
我所拥有的一切都是可行的,但我真的应该能够做到:
public function findOs($userAgent)
{
$resultSet = $this->tableGateway->select()->where('operating_system_pattern like %' . $userAgent . '%';
}
但我想不出正确的方法
编辑(12/11/2012 07:53):
我从Sam的答案中尝试了以下内容,但出现了错误:
$spec = function (Where $where) {
$where->like('operating_system_type', '%' . $this->userAgent . '%');
};
$resultSet = $this->tableGateway->select($spec);
但出现以下错误:
Catchable fatal error: Argument 1 passed to Detectos\Model\OperatingSystemsTable::Detectos\Model\{closure}() must be an instance of Detectos\Model\Where, instance of Zend\Db\Sql\Select given.
我还想补充一点,我已经阅读了文档并遵循了教程。这里没有提到使用Zend\Db\Sql。我没有在tableGateway中使用高级where子句的示例。我可能遗漏了什么,但我不认为这是显而易见的 为什么人们忽视了这个问题?简单的例子如下:
$artistTable = new TableGateway('artist', $adapter);
$rowset = $artistTable->select(array('id' => 2));
但是,您可以为select()函数提供类型为Zend\Db\Sql\Where
的参数。再次帮助很多。使用Where
可以执行更清晰的代码操作,如:
$where = new Where();
$where->like('username', 'ralph%');
$this->tableGateway->select($where)
希望这对你有所帮助。不要忽略文档!;) 更新了,显然where匿名函数返回一个select语句,而不是where对象,我不知道。像这样,它应该可以工作,但没有找到致命错误:类'Detectos\Model\Where'。尝试执行时:$where=newwhere();您需要
使用Zend\Db\Sql\Where
:很抱歉没有明确提及,谢谢。我今天晚些时候再查。我使用了Zend\Db\Sql;但不要使用Zend\Db\Sql\Where;您总是需要使用显式类,或者如果使用父名称空间,则必须执行newsql\Where()
,这也会奏效