Zend выделяет все столбцы - PullRequest
7 голосов
/ 23 июня 2009

В следующем коде:


$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 выбирает все столбцы в таблице, а не только запрошенные.

Как я могу выбрать только некоторые?

Ответы [ 2 ]

7 голосов
/ 23 июня 2009

Проблема в вашем 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 голосов
/ 23 июня 2009

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

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