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 构建查询条件,但我认为您应该记住 CDbCriteria->with 用于Eager Loading,这意味着您将获得一个 CActiveRecord 对象,包括相关的 CActiveRecord(s)由 CDbCriteria->with 中的关系名称指定。

因此,如果您正在寻找一个子猫并且急切地加载了所有子猫,您应该过滤它。

  1. 如果它是一个数组,你可以迭代 $models->subcat。
  2. 您可以使用 CDbCriteria 的连接条件来替换 with 条件。

我更喜欢第二种选择。

$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 回答