Zend Framework LeftJoin - PullRequest
       0

Zend Framework LeftJoin

0 голосов
/ 07 февраля 2011

Вот код, который не работает.

$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);

1 Ответ

2 голосов
/ 07 февраля 2011

Это потому, что вы используете столбец id в выражении WHERE и / или LEFT JOIN ON, а столбец идентификатора должен присутствовать в обеих таблицах, к которым вы пытаетесь присоединиться.

Вам необходимо указать, какой идентификатор следует использовать в обоих случаях.

Как и характеристика.ид, или характеристическое_значение.ид, или tarriff.id.

Вы можете использовать псевдоним, используя массив в качестве параметра для методов from() и joinLeft().

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