2011-12-22 14 views
6

Sto cercando di ottenere dati da più tabelle e ho terminato con questo errore: SQL: SQLSTATE [42S22]: colonna non trovata: 1054 colonna sconosciuta 'p.firstname' in 'field list'Colonna sconosciuta - più join in CDbCriteria

$criteria = new CDbCriteria; 
    $criteria->select = 'ohu_id, hash, p.firstname, p.surname, p.city, u.email AS Email'; 
    $criteria->join = 'LEFT JOIN `profiles` p ON p.user_id = user_id'; 
    $criteria->join = 'LEFT JOIN users u ON user_id = u.id'; 
    $criteria->condition = 'offer_id = :oID'; 
    $criteria->params = array(':oID' => $_GET['id']); 

    $model = MyModel::model()->findAll($criteria); 

Qualcuno sa cosa sto facendo male? O c'è un modo migliore per ottenere dati correlati?

risposta

18

Stai facendo lo stesso errore che ho fatto io.

Sei sovrascrivendo la prima aderire con la seconda, invece di aggiungendo la seconda join.

$criteria->join = "join ...."; //first join 
$criteria->join .= "join ...."; //second join 

applausi

3

È meglio mostrare la struttura del database. Ma qui è la soluzione per unire più tabelle utilizzando sinistra unirsi

Codice di unire le tabelle:

$criteria->select = 'ohu_id, hash, p.firstname, p.surname, p.city, u.email AS Email'; 
$criteria->alias = 'c'; 
$criteria->join = 'LEFT JOIN profiles p ON (p.user_id = c.user_id) LEFT JOIN users u ON (c.user_id = u.id)'; 

Spero che vi aiuterà.

7

In realtà il suo modo migliore per utenti qualche "con" clausola come questo:

$criteria->with = array(
    'profiles '=>array(
     'select'=>'profiles.user_id', 
     'together'=>true 
    ), 
    'users'=>array(
      'select'=>'users.id', 
      'together'=>true 
    ) 
); 

È possibile utilizzare questo anche nel modello di ricerca di CGridView DataProvider.

Problemi correlati