Yii CDBCriteria Komplexe Join-Abfrage

Ich habe 3 Tabellen:

  1. bank
  2. bank_details
  3. bank_bank_details

Verhältnis zwischen Ihnen:

bank Modell:

public function relations() {
        return array(
            'bankBankDetails' => array(self::HAS_MANY, 'BankBankDetails', 'bank_id'),
        );
}

bank_details Modell:

public function relations() {
        return array(
            'bankBankDetails' => array(self::HAS_MANY, 'BankBankDetails', 'bank_details_id'),
        );
    }

bank_bank_details Modell:

public function relations()
    {
        return array(
            'bank' => array(self::BELONGS_TO, 'Bank', 'bank_id'),            
            'bankDetails' => array(self::BELONGS_TO, 'BankDetails', 'bank_details_id'),
        );
    }

Will ich Holen Bankverbindung wie bank_name, ifsc etc-info im admin-view von bank_details Modell.

Den normalen SQL-Abfrage habe ich erstellt, funktioniert einwandfrei:

SELECT b.name
FROM bank b
LEFT JOIN bank_bank_details bbd ON bbd.bank_id = b.bank_id
LEFT JOIN bank_details bd ON bd.bank_details_id = bbd.bank_details_id
WHERE bd.bank_details_id = bbd.bank_details_id
LIMIT 0 , 30

Nun ich will einfach nur integrieren, diese mit Yii CDBCriteria, sondern seine nicht funktioniert für mich. Bitte überprüfen Sie den code unten:

public function search() {
        $criteria = new CDbCriteria;    
//       select b.name
//       from bank b
//       left join bank_bank_details bbd
//       on bbd.bank_id = b.bank_id
//       left join bank_details bd on bd.bank_details_id = bbd.bank_details_id
//       WHERE bd.bank_details_id = bbd . bank_details_id;

        $criteria->compare('bank_details_id', $this->bank_details_id);
        $criteria->compare('first_holder_name', $this->first_holder_name, true);
        $criteria->compare('nominee1', $this->nominee1, true);
        $criteria->select = 'b.name';
        $criteria->join = 'LEFT JOIN bank_bank_details bbd ON bbd.bank_id = b.bank_id ';
        $criteria->join .= 'LEFT JOIN bank_details bd ON bd.bank_details_id = bbd.bank_details_id';
        $criteria->condition = 'bd.bank_details_id = bbd.bank_details_id';

        return new CActiveDataProvider($this, array(
            'criteria' => $criteria,
            'pagination' => array(
                'pageSize' => 10,
            ),
        ));
    }

Fehler:
500-Fehler Gefunden
CDbCommand konnte nicht die SQL-Anweisung ausführen: SQLSTATE[42S22]: Column nicht found: 1054 Unknown column 'b.bank_id' in 'on clause'

Jede mögliche Hilfe würde geschätzt.

InformationsquelleAutor Sky | 2013-11-12
Schreibe einen Kommentar