2012-10-11 3 views
2

저는 젠드 프레임 워크와 PHP에 매우 익숙합니다.젠드 프레임 워크 2 튜토리얼 AbstractTableGateway

나는 Zend Framework 2 튜토리얼을 읽고 여러 테이블을 쿼리하기 위해 AbstractTableGateway를 사용하려고 시도했다.

클래스 PublicationTable가 확장 :

제공된 선택 개체의 테이블 이름은 테이블 여기 내 코드의 일부입니다

의 일치해야합니다 :

그러나

는 웹 페이지에 다음과 같은 메시지를 받았습니다 AbstractTableGateway {

protected $table = 'publication'; 

public function fetchAll() 
{ 
    $sql = new Sql($this->adapter); 
    $select = $sql->select(); 
    $select->from(array('p' => 'publication')) 
      ->join('author','publication_fk=p.publication_pk'); 

    $resultSet = $this->selectWith($select); 
    return $resultSet; 
} 


... 

}

변수 "protected $ table"이 String이라는 사실을 알고 있습니다. 그럼 어떻게 해결할 수 있습니까? 도움에 감사드립니다!

EC

답변

5

from() 방법은 테이블 이름 아닌 열의 목록 걸린다. columns()을 사용하여 원하는 열을 지정하십시오. 난 당신이 조인을하고있는 것처럼 TableGateway에서 시도한 적이 없지만, TableGateway는 따라야 할 최상의 패턴이 아닙니다. 직접 DbAdapater를 사용하는 경우

,이 같은 무언가 작동합니다 :

use Zend\Db\Sql\Select, 
    Zend\Db\ResultSet\ResultSet; 

$select = new Select; 
$select->from('publication') 
    ->join('author', 'publication.publication_pk = author.publication_fk', 
      array('columnnamefromauthortable1', 'columnnamefromauthortable2')); 

$statement = $adapter->createStatement(); 
$select->prepareStatement($adapter, $statement); 

$resultSet = new ResultSet(); 
$resultSet->initialize($statement->execute()); 
+0

감사합니다. 그것은 효과가 있었다. $ Select 포함> (배열 ('P'=> 'vivo_publication')) ... 및 오류없이로드 페이지에서 : 나는 이런 식으로 뭔가를 시도했다. – user1655688