0

このような基準に with 句があります

$criteria2->with = array('subcat','adimages');

しかし、実際にはこのサブキャットを一意にする必要がありますが、このような条件を追加する場合

$criteria2 = new CDbCriteria();
$criteria2->select = '"t".USERID, "t".ADID ,"t".ADTYPE, "t".ADTITLE, "t".ADDESC, "t".PAGEVIEW, "t".DISPPUBLISHDATE,"t".SUBCATID';
$criteria2->addCondition("USERID IN (".implode(',',$uniqueuser).")");
$criteria2->addCondition("ADID IN (".implode(',',$uniquead).")");
//  $criteria2->addCondition("SUBCATID IN(".implode(',',$uniquesubcat).")");
//  $criteria2->compare("\"t\".SUBCATID", $this->SUBCATID);
$criteria2->addCondition('DISPPUBLISHDATE >= CURRENT_DATE - 3 AND STATUS = 1
        AND EXPIRYDATE >= CURRENT_DATE AND USERID IS NOT NULL');
$criteria2->addCondition('EXISTS  (select 1 FROM {{ADIMAGES}} WHERE {{ADIMAGES}}.ADID = "t".ADID)');
$criteria2->order = '"t".PAGEVIEW DESC,"t".PUBLISHDATE DESC';
$criteria2->limit = 4;
$criteria2->addCondition("\"subcat\".SUBCATID IN(".implode(',',$uniquesubcat).")");     
$criteria2->with = array('subcat','adimages');
$result2 = $this->findAll($criteria2);
return $result2;

あいまいな列が定義されているというエラーが発生しています...そのサブキャット関係を一意の列内に設定するにはどうすればよいですか

$uniquesubcat arrray ?
4

2 に答える 2

4

このようにテーブルエイリアスを設定してみてください

$criteria2 = new CDbCriteria();
// SELECT
$criteria2->select = 't.USERID, t.ADID, t.ADTYPE, t.ADTITLE, t.ADDESC, t.PAGEVIEW, t.DISPPUBLISHDATE, subcat.SUBCATID';
// JOIN
$criteria2->with = array('subcat','adimages');
// WHERE
$criteria2->compare('t.STATUS', 1);
$criteria2->addCondition('t.DISPPUBLISHDATE >= CURRENT_DATE - 3');
$criteria2->addCondition('t.EXPIRYDATE >= CURRENT_DATE');
$criteria2->addCondition('t.USERID IS NOT NULL');
$criteria2->addCondition('EXISTS  (select 1 FROM {{ADIMAGES}} as ADIMAGES WHERE ADIMAGES.ADID = t.ADID)');

$criteria2->addInCondition('t.USERID', $uniqueuser);
$criteria2->addInCondition('t.ADID', $uniquead);
$criteria2->addInCondition('subcat.SUBCATID', $uniquesubcat);     
// ORDER
$criteria2->order = 't.PAGEVIEW DESC, t.PUBLISHDATE DESC';
// LIMIT
$criteria2->limit = 4;

$result2 = $this->findAll($criteria2);
return $result2;
于 2012-11-02T05:17:20.350 に答える
0

ここでは、CActiveRecord のクエリ基準を作成しようとしているようですが、 Eager Loadingには CDbCriteria->with が使用されていることに注意してください。つまり、関連する CActiveRecord を含む CActiveRecord オブジェクトを取得することになります。 CDbCriteria->with のリレーション名で指定。

したがって、1 つのサブキャットを探していて、すべてのサブキャットを熱心にロードした場合は、それをフィルタリングする必要があります。

  1. 配列の場合、 $models->subcat を反復できます。
  2. with 条件を置き換えるために、CDbCriteria の結合条件を使用できます。

私は2番目の選択肢を好みます。

$criteria2->join = "LEFT JOIN subcat s ON (s.SUBCATID = t.SUBCATID)" 

したがって、これを変更できます。

$criteria2->addInCondition('subcat.SUBCATID', $uniquesubcat); 

為に

$criteria2->addInCondition('s.SUBCATID', $uniquesubcat);     

結論として、CDbCriteria の join プロパティを使用してsubcatエイリアスを指定し、クエリを明確にすることができます。

于 2012-11-02T16:13:28.777 に答える