2009-06-23 14 views
7

W poniższym kodzie:Zend wybiera wszystkie kolumny


$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 wybiera wszystkie kolumn w tabeli, a nie tylko te wymagane.

Jak mogę wybrać tylko niektóre?

Odpowiedz

6

Problem polega na wywołaniu join() metoda:

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

Opcjonalny trzeci argument to kolumny z to stołowego. Jeśli argument jest nieobecny, domyślnie jest to user_details.*.

Należy pamiętać, że dodano kolumny kwalifikowane z obu tabel w tabeli from(), ale nie ma to wpływu na domyślną wartość user_details.*. Niestety, ale Zend_Db_Select po prostu nie jest wystarczająco inteligentny, aby śledzić to wszystko.

Można dokonać połączenia join() dodawać żadnych kolumn przekazując pustą tablicę:

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

Wykwalifikowany kolumny dodane w zaproszeniu from() powinien nadal istnieć. Aby to sprawdzić, wypisz najpierw: SQL:

6

Dodaj kolejny parametr do łączenia na końcu - pusta tablica. To powie mu, aby nie wybierać kolumn z łączenia. Za pomocą kodu, który teraz masz, wybierasz wszystkie kolumny z połączonej tabeli.

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

za przybycie tam jako pierwszy, +1 za Billa za dodatkowy szczegół. Dlaczego tylko Zend ludzie głosują na Zendów? – karim79

+0

+1 do Jamesa za odpowiedź. –

Powiązane problemy