0

私は3つのテーブルを持っています:

  1. 銀行
  2. bank_details
  3. bank_bank_details

それらの間の関係:

銀行モデル:

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

bank_details モデル:

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

bank_bank_details モデル:

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

bank_detailsモデルの admin ビューで、bank_name、ifsc などの銀行の詳細情報を取得したいと考えています。

私が生成した通常の SQL クエリは、完全に正常に動作します。

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

これを Yii CDBCriteria と統合したいだけですが、うまくいきません。以下のコードを確認してください。

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,
            ),
        ));
    }

エラー: エラー 500 が見つかりました CDbCommand は SQL ステートメントの実行に失敗しました: SQLSTATE[42S22]: 列が見つかりません: 1054 不明な列 'b.bank_id' in 'on clause'

どんな助けでも大歓迎です。

4

4 に答える 4

0

@Evgeniyが述べたように、次を使用してエイリアスを設定する必要があります$criteria->alias = 'b';

http://www.yiiframework.com/doc/api/1.1/CDbCriteria#alias-detail

CDbCriteria::withこれを使用して関連するモデルを選択することもできます。

http://www.yiiframework.com/doc/api/1.1/CDbCriteria#with-detail

上記を使用する場合は、CDbCriteria::together正しく使用することも確認してください。関連するすべてのモデルを一度に選択するには、 に設定しtrueます。

http://www.yiiframework.com/doc/api/1.1/CDbCriteria#together-detail

于 2013-11-12T08:41:27.020 に答える
0

ここで $criteria->select = 'b.name'; は銀行名のみを選択しており、IDは選択されていません

次のようなyii形式ではわかりません

$criteria->select = 'b.name,b.bank_id';

また

$criteria->select = array('b.name,b.bank_id');

于 2013-11-12T07:32:31.617 に答える