#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-запрос ВНУТРЕННЕГО СОЕДИНЕНИЯ, а не ВНЕШНЕГО СОЕДИНЕНИЯ — это разные вещи, верно? итак, каким должен быть правильный способ выполнения ВНЕШНЕГО соединения?