Как работают левые внешние соединения в Zend framework

#zend-framework #zend-db #zend-db-table

#zend-framework #zend-db #zend-db-table

Вопрос:

У меня есть этот 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);
  

Комментарии:

1. добавьте свое решение в качестве ответа и отметьте его завершенным

2. спасибо, что заставил меня заметить, что @Jaitsu, я не сделал этого раньше, потому что я пытался ответить на другой вопрос, который я задал пару дней назад, и я не смог этого сделать. На самом деле… Я не могу пометить свой ответ как правильный до завтра.

Ответ №1:

Я добавляю ответ на вопрос, предложенный @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);
  

Ответ №2:

эй, этот код генерирует SQL-запрос ВНУТРЕННЕГО СОЕДИНЕНИЯ, а не ВНЕШНЕГО СОЕДИНЕНИЯ — это разные вещи, верно? итак, каким должен быть правильный способ выполнения ВНЕШНЕГО соединения?