2012-11-11 6 views
2

안녕하세요 저는 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 절을 사용하는 예제가 없습니다. 나는 아마 뭔가를 놓치고 있지만 분명하지 않다고 생각합니다.

답변

9

사람들이 왜 official documentation을 무시합니까? 가장 단순한 예는이 될 것입니다 :

$artistTable = new TableGateway('artist', $adapter); 
$rowset = $artistTable->select(array('id' => 2)); 

그러나, 당신은() 선택을 제공 유형 Zend\Db\Sql\Where의 인수를 작동 할 수 있습니다. 다시 this part of the official documentation은 많은 도움이됩니다. 이 당신에게 조금 도움이

$where = new Where();  
$where->like('username', 'ralph%'); 

$this->tableGateway->select($where) 

희망 : Where하면 같은 청소기 코드 작업을 수행 할 수 있습니다. 문서를 무시하지 마십시오! ;)

+0

익명의 함수가 Select 문을 반환하고 내가 인식하지 못했던 Where 객체를 반환하지 않는 것 같습니다. 이것처럼 작동해야합니다 – Sam

+0

아니요, 치명적인 오류 : 'Detectos \ Model \ Where'클래스를 찾을 수 없습니다. 하려고 할 때 : $ where = new Where(); –

+1

'Zend \ Db \ Sql \ Where'를 사용해야합니다. S 명시 적으로 언급하지 않아서 죄송합니다. – Sam