2009-06-23 3 views
7

В следующем коде:Zend выбирает все столбцы


$selectColumns= array('user_id.user_email', // inner join the data from user_id and user_details 
          'user_details.first_name', 
          'user_details.last_name'); 
     $result = $handle->select()->from('user_id', $selectColumns) 
            ->where('user_id.uid=?', $uid) 
            ->join('user_details', 'user_id.uid = user_details.uid') 
            ->query(ZEND_DB::FETCH_OBJ); 

Zend выбирает все столбцов в таблице, а не только запрошенные из них.

Как выбрать только некоторые из них?

ответ

6

Проблема заключается в вашем join() вызова метода:

->join('user_details', 'user_id.uid = user_details.uid') 

Необязательный третий аргумент столбцы это таблицы. Если аргумент отсутствует, по умолчанию он равен user_details.*.

Обратите внимание, что вы добавили квалифицированные столбцы из обеих таблиц в таблицу from(), но это не влияет на значение по умолчанию user_details.*. Извините, но Zend_Db_Select просто недостаточно умен, чтобы отслеживать все это.

Вы можете сделать join() вызов добавить столбцов для пропускания пустого массива:

->join('user_details', 'user_id.uid = user_details.uid', array()) 

Квалифицированных столбцы, добавленных в from() вызова должны еще быть там. Для проверки этого, напечатайте SQL:

print $result . "\n"; // calls __toString() method on Zend_Db_Select object 
6

Добавить еще один параметр в ваше соединение в конце - пустой массив. Это скажет ему, чтобы не выбирать столбцы из соединения. С кодом, который у вас есть сейчас, вы выбираете все столбцы из объединенной таблицы.

->join('user_details', 'user_id.uid = user_details.uid', array()) 
+0

+1 для получения первой, +1 для Билла для дополнительной информации. Почему только люди Zend голосуют людей Zend? – karim79

+0

+1 Джеймсу за ответ тоже. –

Смежные вопросы