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

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


person Community    schedule 23.06.2009    source источник


Ответы (2)


Проблема в вашем вызове метода 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
person Bill Karwin    schedule 23.06.2009

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

->join('user_details', 'user_id.uid = user_details.uid', array())
person James Skidmore    schedule 23.06.2009
comment
+1 за то, что пришел первым, +1 за Билла за дополнительную информацию. Почему только люди Zend голосуют за людей Zend? - person karim79; 23.06.2009