2009-06-23 32 views
7

En el siguiente código:Zend selecciona todas las columnas


$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 selecciona todos las columnas en la tabla, no sólo a los solicitados.

¿Cómo puedo seleccionar solo algunas?

Respuesta

6

El problema está en su llamada join() método:

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

El tercer argumento es opcional columnas de esta tabla. Si el argumento está ausente, se establece de manera predeterminada en user_details.*.

Tenga en cuenta que ha agregado columnas calificadas de ambas tablas en la tabla from(), pero esto no tiene efecto en el valor predeterminado user_details.*. Lo sentimos, pero Zend_Db_Select simplemente no es lo suficientemente inteligente como para realizar un seguimiento de todo eso.

Usted puede hacer que la llamada no join() añadir columnas al pasar una matriz vacía:

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

Las columnas calificados agregó en la llamada from() todavía deberían estar allí. Para verificarlo usted mismo, imprima el SQL:

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

Agregue otro parámetro a su unión al final: una matriz vacía. Eso le dirá que no seleccione columnas de la unión. Con el código que tienes ahora, estás seleccionando todas las columnas de la tabla unida.

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

+1 para llegar allí primero, +1 para Bill para obtener detalles adicionales. ¿Por qué solo la gente de Zend vota a la gente de Zend? – karim79

+0

+1 a James por la respuesta también. –

Cuestiones relacionadas