私はCActiveDataProviderで使用するCDBCriteriaに次のSQLの変換に苦労してきたが見つかりません。 は「PresetDeviceLinkを選択、デバイス PresetDeviceLink INNER FROM Device.id = PresetDeviceLink上のデバイスを登録しよう。次のように私のコントローラでYiiのCDbCriteria結合列は、
mysql> describe PresetDeviceLink;
+----------+---------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+---------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| presetId | int(11) | NO | | NULL | |
| deviceId | int(11) | NO | | NULL | |
| state | int(11) | NO | | 0 | |
| value | int(11) | NO | | 32 | |
+----------+---------+------+-----+---------+----------------+
mysql> describe Device;
+-------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| ref | int(11) | NO | | NULL | |
| roomId | int(11) | NO | | NULL | |
| typeId | int(11) | NO | | NULL | |
| paired | tinyint(1) | NO | | 0 | |
| name | varchar(255) | YES | | NULL | |
| description | text | YES | | NULL | |
| dimmerPos | int(11) | NO | | 0 | |
+-------------+--------------+------+-----+---------+----------------+
私のコードは次のとおり:
次のようにDevice.roomId = 1"表構造であるのDeviceID私はCActiveDataProviderソースとして「デバイス」を使用し、「PresetDeviceLink」に参加する声明を参加変更した場合
CDbCommand failed to execute the SQL statement: SQLSTATE[42S22]: <b>Column not
found</b>: 1054 Unknown column 'PresetDeviceLink.deviceId' in 'on clause'. The SQL
statement executed was: SELECT COUNT(*) FROM `PresetDeviceLink` `t` INNER JOIN
Device ON Device.id = PresetDeviceLink.deviceId WHERE Device.roomId = 1
奇妙なことは、ある、それはその後、と文句を言います:私は次のエラーを取得する実行10
Device.roomId列が見つかりませんでした。
CActiveDataProviderの仕組みを理解できませんか?私がCActiveDataProviderに渡すテーブル内のフィールドからの条件(joinまたはwhere句内)のみを使用できることがわかります。何かアドバイス?
PS - SQLクエリは、MySQLコンソールで美しく動作します。事前に
おかげで、に表示されたよう ベン
パーフェクト - ありがとう。しかし、エイリアスを見つけたはずですが、私はこれもドキュメントに記載されていると思いました!両方の提案がうまくいった。私は、コードの明快さのためにエイリアスを設定することを選択しました。助けてくれてありがとう! – Ben
私はそれを取り戻します - それはドキュメントにあります。明らかにそうではありません。 http://www.yiiframework.com/doc/api/1.1/CDbCriteria - 「エイリアス」セクションで説明しています。 – Ben