2

私はZendFrameworkとphpを初めて使用します。

Zend Framework 2チュートリアルを実行し、AbstractTableGatewayを使用して複数のテーブルをクエリしようとしました。

しかし、Webページに次のメッセージが表示されました。

提供される選択オブジェクトのテーブル名は、テーブルのテーブル名と一致する必要があります

これが私のコードの一部です:

クラス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」が文字列であることを認識しています。では、どうすればこれを解決できますか?助けてくれてありがとう!

EC

4

1 に答える 1

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());
于 2012-10-11T15:01:38.017 に答える