Zend框架离开了

时间:2011-02-07 00:00:43

标签: php zend-framework left-join

这是不起作用的代码。

$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 个答案:

答案 0 :(得分:2)

这是因为您在id和/或WHERE子句中使用了LEFT JOIN ON列,而您正尝试加入的两个表中都应包含id列。

您需要指定在两种情况下都应使用哪个ID。

喜欢characteristic.id或characteristic_value.id或tarriff.id。

您可以使用数组作为from()joinLeft()方法的参数来使用别名。

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