2

Zendframework 2 の初心者です。2 つのテーブルを結合して結果を表示しようとしています。

2つのテーブルは次のとおりです。作品とアーティスト。テーブルは、artist_id に基づいて結合されます。

STEP 1>モデルに2つのクラス(Works、Artist)を作成 STEP 2>WorksTableに以下のコードを記述

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'

誰もこのエラーに遭遇しましたか? これを解決する方法についてのアイデアはありますか?

4

2 に答える 2

0

テーブルをそれ自体に結合するworksと、mysqlはそれを結合された2つの別々のテーブルとして扱いますが、同じ名前であるため、エラーが発生します。

結合するテーブルのエイリアスを使用:

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

しかし、それは単なるタイプミスのようで、テーブルはartists

于 2012-11-04T01:44:33.533 に答える