2011-02-07 10 views
0

ここでは動作しないコードです。Zend framework leftJoin

$select = $tariffsTable->select(Zend_Db_Table_Abstract::SELECT_WITHOUT_FROM_PART) 
         ->from('tariff', null) 
         ->where('id = ?', $this->id) 
         ->joinLeft('characteristic_value', 
            'characteristic_value.tariff_id = id', 
            array('value_' . $locale, 'characteristic_id')) 

         ->joinLeft('characteristic', 
            'id = characteristic_value.characteristic_id', 
            array('name_' . $locale, 'alias')); 

$select->setIntegrityCheck(false); 
$tariffCharacteristics = $tariffsTable->fetchAll($select)->toArray(); 

ありがとうございます!私は問題を解決しました。ここで動作するコードは次のとおりです。

$select = $tariffsTable->select(Zend_Db_Table_Abstract::SELECT_WITHOUT_FROM_PART) 
          ->from('tariff', null) 

          ->joinLeft(array('characteristic_value'), 
             'characteristic_value.tariff_id = tariff.id', 
             array('value_' . $locale)) 

          ->joinLeft(array('characteristic'), 
             'characteristic.id = characteristic_value.characteristic_id', 
             array('name_' . $locale, 'alias')) 
          ->where('tariff.id = ?', $this->id); 

    $select->setIntegrityCheck(false); 

答えて

2

idカラムは、あなたが参加しようとしている両方のテーブルに存在しなければならない一方で、あなたはWHEREおよび/またはLEFT JOIN ON句にid列を使用しているので、それがあります。

どちらの場合でもどちらのIDを使用するかを指定する必要があります。

同様の特性.idまたは特性値.idまたはtarriff.id。

from()およびjoinLeft()メソッドのパラメータとして配列を使用すると、エイリアスを使用できます。

$select->from(array('t' => 'tarriff')) 
    ->where('t.id = ?', $this->id);