Yii CGridViewで’where clause is ambiguous’が出た時の対処法

CGridViewでwith指定して、別テーブルを結合している場合、where句のカラム名にエイリアスがつかずエラーが出るケースがあります。

CGridViewはCActiveDataProviderを使用してデータ取得するため、Giiで焼いたModelクラスのseach()メソッドを呼んでインスタンス生成していると思います。

その際、Giiのデフォルトでは、

$criteria->compare('hoge',$this->hoge);

という実装になっており、大概の場合はこれが原因で’where clause is ambiguous’(where句があいまいだぞオラっ)って怒られます。

$criteria->compare('t.hoge',$this->hoge);

のように、カラム指定部分にテーブル名のエイリアス”t.”を付加してあげればOKです。
毎度付加するのは面倒なので、Giiのテンプレートをカスタマイズしておくといいんでしょうね。

エイリアスがtとか気に食わねぇよって方は、criteriaのaliasプロパティに好きな名称ブチ込んて、tの部分も変えてあげれば良いです。(tとなっているのは、Yiiが生成するSQLのデフォルトの仕様です)
その場合にしても、withに指定するrelation名とは被らないように注意しましょう。

 


コメントを残す

メールアドレスが公開されることはありません。