2012-11-02 3 views
2

Zendframework 2에서 새로운 기능입니다. 두 테이블을 결합하여 결과를 표시하려고합니다.ZendFramework 2 : 구문 오류 또는 액세스 위반 : 1066 고유하지 않은 테이블/별칭 :

두 개의 표가 있습니다. 작품 및 아티스트 표는 artist_id를 기준으로 조인됩니다. WorksTable에서

STEP 1> 등재 2 개 클래스 (서지, 아티스트) 모델 STEP 2> I는 I는 다음과 같은 코드를 정의 제어부에서 다음 코드

class WorksTable extends AbstractTableGateway 
{ 
    protected $table ='works'; 

    public function __construct(Adapter $adapter) 
     { 

     $this->adapter = $adapter; 
     $this->resultSetPrototype = new HydratingResultSet(
       new ArraySerializableHydrator(), 
       new Works() 
     ); 
     $this->resultSetPrototype->buffer(); 
     $this->initialize(); 
    } 

    public function fetchAll() 
    { 
     $select = $this->getSql()->select(); 
     $select->join('works','artists.artist_id = artist_id '); 


     //create paginator object to display records 
     $paginator = new Paginator(
       new DbSelect($select, $this->adapter, $this->resultSetPrototype) 
     ); 

     return $paginator; 

    } 

} 

STEP 3>이

public function searchAction() 
    { 
     $request = $this->getRequest(); 
     $paginator = $this->getWorksTable()->fetchAll(); 
//   $paginator->setItemCountPerPage(12); 
     $vm = new ViewModel(array(
       'poster' => $paginator, 
     )); 
     $vm->setVariable('paginator', $paginator); 
     return $vm; 
    } 

문장 용 $ paginator-> setItemCountPerPage (12);

SQLSTATE[42000]: Syntax error or access violation: 1066 Not unique table/alias: 'works' 

사람이 에러를 본적이 있습니다 :

메시지 오류 얻을? 이 문제를 해결하는 방법에 대한 아이디어가 있습니까?

답변

0

당신은 자신에게 works 테이블을 조인합니다. mysql은이 테이블을 두 개의 분리 된 테이블로 처리하지만 같은 이름으로 처리합니다. 따라서 오류가 발생합니다.

$select = $this->getSql()->select(); 
$select->join(array('w' => 'works'),'artists.artist_id = artist_id '); 

있지만 그냥 오타되고 테이블도 didn를 query.and을 시작 artists 테이블이 사용하지 않은 artists

0

해야 것 같습니다 : 테이블

사용 별칭 당신은 가입 조인시 works 테이블을 사용하지 마십시오.

use Zend\Paginator\Adapter\DbSelect; 
use Zend\Db\Sql\Sql; 
public function fetchAll() 
{ 
    $sql = new Sql($this->tableGateway->getAdapter()); 
    $select = new Select(); 
    $select->from("artists"); 
    $select->columns(array('*')); 
    $select->join('works','artists.artist_id = works.artist_id',array('your_wanted_column_names,don't mention again artist_id here because there should be a error')); 

    $paginator = new Paginator(
      new DbSelect($select, $this->adapter, $this->resultSetPrototype) 
    ); 

    return $paginator;