私は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;
}
結合テーブルにエイリアスを配置する方法を見つけましたが、ベース テーブル製品はどうですか?