Как левые внешние объединения работают на Zend Framework - PullRequest
4 голосов
/ 26 мая 2011

У меня есть этот SQL-запрос:

SELECT pais FROM pais LEFT OUTER JOIN users_has_pais ON pais.id = users_has_pais.pais_id WHERE users_has_pais.users_id = 100

И я пытаюсь написать что-то похожее в модели, используя метод leftJoin из Zend_Db_Table, но я понятия не имею, что я делаю ...Я пробовал что-то вроде этого:

$resultSetPais = Zend_Db_Table::getDefaultAdapter();
$some = $resultSetPais->select()
                      ->joinLeft( array ( 'users_has_pais' => 'users' ),
                          'pais.id = users_has_pais.pais_id', 'pais' );

Но правда в том, что я понятия не имею, как заставить его работать, и этот код просто возвращает информацию об адаптере.

РЕШЕНО:

        $instance = Zend_Db_Table_Abstract::getDefaultAdapter();
        $pais = $instance->select();
        $pais->from(array('p' => 'pais'), array('p.pais') )
             ->join( 'users_has_pais', 'p.id = users_has_pais.pais_id' )
             ->where( 'users_has_pais.users_id = ?', $row->id );
        $paisEntry = $instance->fetchCol($pais);

Ответы [ 2 ]

1 голос
/ 26 мая 2011

Я добавляю ответ на вопрос, предложенный @Jaitsu.Для такого рода левого соединения:

SELECT pais FROM pais LEFT OUTER JOIN users_has_pais ON pais.id = users_has_pais.pais_id WHERE users_has_pais.users_id = 100

Код должен быть примерно таким:

    $instance = Zend_Db_Table_Abstract::getDefaultAdapter();
    $pais = $instance->select();
    $pais->from(array('p' => 'pais'), array('p.pais') )
         ->join( 'users_has_pais', 'p.id = users_has_pais.pais_id' )
         ->where( 'users_has_pais.users_id = ?', $row->id );
    $paisEntry = $instance->fetchCol($pais);
0 голосов
/ 15 июня 2011

эй, этот код создает SQL-запрос INNER JOIN, а не OUTER JOIN - это другое дело, верно?Итак, какой должен быть правильный способ сделать OUTER JOIN?

...