안녕하세요 저는 Zend 2와 손을 잡으려고하고 있는데 테이블 게이트웨이에서 where 절과 관련된 문제가 있습니다.Zend 2 - TableGateway Where 절
//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 . '%';
}
하지만 올바른 방법은 생각할 수 없습니다.
편집 (2012년 12월 11일 7시 53분는) : 나는 샘의 대답에서 다음과 같은 시도했지만 오류가있어 :
$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 절을 사용하는 예제가 없습니다. 나는 아마 뭔가를 놓치고 있지만 분명하지 않다고 생각합니다.
익명의 함수가 Select 문을 반환하고 내가 인식하지 못했던 Where 객체를 반환하지 않는 것 같습니다. 이것처럼 작동해야합니다 – Sam
아니요, 치명적인 오류 : 'Detectos \ Model \ Where'클래스를 찾을 수 없습니다. 하려고 할 때 : $ where = new Where(); –
'Zend \ Db \ Sql \ Where'를 사용해야합니다. S 명시 적으로 언급하지 않아서 죄송합니다. – Sam