0

私は2つのテーブルを持っています.id、name、price、およびbrandフィールドを持つ製品と、id、name、urlフィールドを持つブランドです。この 2 つのテーブルから両方のフィールドを選択したいと思います。列を定義できず、エイリアスを定義しています。

製品表

...
public function fetchAll()
{

    $select = new Select;
    $select->from($this->table);
    $select->join('brand', 'product.brand = brand.id', array('name', 'url'));
    $select->columns(array('product.id', 'name', 'price'));

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

    $resultSet = new ResultSet();
    $resultSet->initialize($statement->execute());
    return $resultSet;
   }

メッセージ: SQLSTATE[42S22]: 列が見つかりません: 1054 不明な列 'product.product.id' が 'フィールド リスト' にあります

リクエストの良い方法は何ですか: p.id を id、p.name を name、p.price、b.id を brandid、b.name を brandname... として選択します。

数回試した後、この解決策を見つけました:

public function fetchAll()
{

    $select = new Select;
    $select->from($this->table);
    $select->join(array('b' => 'brand'), 'product.brand = b.id', array('brandid' => 'id', 'brandname' => 'name', 'url'));
    $select->columns(array('id', 'name', 'price'));

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

    $resultSet = new ResultSet();
    $resultSet->initialize($statement->execute());
    return $resultSet;
}

結合テーブルにエイリアスを配置する方法を見つけましたが、ベース テーブル製品はどうですか?

4

1 に答える 1