0

私は Yii CActiveRecord A ->with('B')->findAll() メソッドを使用しています。ここで、列の 1 つは A と B で共通であり、この列も条件の一部です。

問題は、実行中に SQL エラーが発生することです。これは、mySQL が A.column または B.column のどちらを参照するかを認識していないためです。実行されたクエリを表示したところ、クエリの実行中に yii の名前テーブルが 't' になっているように見えたので、条件に 't'.columnname を追加すると、すべて正常に機能しました。

私の質問は、条件を次のように使用している場合に、この種のコードが適切かどうかです。

'CURDATE( ) <= dateAND t. removed= :削除された AND ispublic= 1 AND isopen= 1'

クエリに含まれる「t」は参照しませんが。Yii は独自にテーブルの名前を変更します。これが優れたコーディング方法であると思われる場合、またはそれを行うためのより良い方法がある場合はお知らせください。

ありがとう。

4

1 に答える 1

1

「with()」を使用していない場合は、列名にエイリアス「t」を追加せずに条件を記述できますが、「with()」を使用してリレーションのデータを検索する場合は、エイリアス「t」を追加する必要があります。基本モデルの状態。それらがリレーションを持つ共通の列でない場合は、ベースモデルへのエイリアスを回避できます。

Yiiのデフォルトでは、ベースモデル「t」にエイリアスが追加されるため、ベースモデルの列名には「t」を使用する必要があります。

于 2012-07-19T05:22:20.927 に答える