Yii-activeRecord-with添加了一个自动orderby子句

Yii-activeRecord-with添加了一个自动orderby子句,activerecord,yii,Activerecord,Yii,当我使用CDCriteria进行测试时,我试图找出添加orderBy子句的原因和位置,但在Internet上什么都没有,并且在代码中找不到 我有3个表,分别定义了地点类型id和名称: 类别>活动>专业 我有一张桌子: id |名称|地点|类型| id |地点|类型| spe | id 我在模型中定义了几个关系: public function relations() { return array( 'placeType' => array(self::BELONG

当我使用CDCriteria进行测试时,我试图找出添加orderBy子句的原因和位置,但在Internet上什么都没有,并且在代码中找不到

我有3个表,分别定义了地点类型id和名称: 类别>活动>专业

我有一张桌子:

id |名称|地点|类型| id |地点|类型| spe | id

我在模型中定义了几个关系:

public function relations() {
    return array(

        'placeType' => array(self::BELONGS_TO, 'PlaceType', 'place_type_id'),
        'placeTypeSpecialty' => array(self::BELONGS_TO, 'PlaceTypeSpecialty', 'place_type_specialty_id'),           
    );
}
PlaceType活动模型中定义的关系:

  public function relations() {
    return array(           
        'places' => array(self::MANY_MANY, 'Place', 'place_secondary_type(place_type_id, place_id)'),
        'placeTypeCategory' => array(self::BELONGS_TO, 'PlaceTypeCategory', 'place_type_category_id'),
        'placeTypeSpecialties' => array(self::HAS_MANY, 'PlaceTypeSpecialty', 'place_type_id'),
    );
我想搜索关键字在地方名称,相对活动名称,相对专业名称和相对类别名称取决于活动

我试过:

        $criteria = new CDbCriteria();
    $criteria->with = array('placeType', 'placeType.placeTypeSpecialties', 'placeType.placeTypeCategory');
    $criteria->together = true;


    $words = StringHelper::parseKeywords($keywords);


    $keywordsCriteria = new CDbCriteria();
    foreach ($words as $w) {
        $wordCriteria = new CDbCriteria();

        $wordCriteria->compare('t.name', $w, true, 'OR');
        $wordCriteria->compare('placeTypeCategory.name', $w, true, 'OR');
        $wordCriteria->compare('placeTypeCategory.expression', $w, true, 'OR');
        $wordCriteria->compare('placeType.name', $w, true, 'OR');
        $wordCriteria->compare('placeType.common_words', $w, true, 'OR');
        $wordCriteria->compare('placeTypeSpecialties.name', $w, true, 'OR');
        $keywordsCriteria->mergeWith($wordCriteria, 'OR');
    }

    $criteria->mergeWith($keywordsCriteria);

    $this->getDbCriteria()->mergeWith($criteria);
    return $this;
但是。。。SQL查询失败,原因是:

SQLSTATE[23000]: Integrity constraint violation: 1052 Column 'name' in order clause is ambiguous.
而orderby条款是:

ORDER BY distance ASC, placeType.name ASC, name ASC
名称显然是模棱两可的,但我不想按此字段订购!添加$criteria->with=array'placeType.placeTypeCategory';添加此order by子句

我的问题是:

为什么添加此项以及如何忽略此项。。
谢谢,我发现了这个问题

先前的开发人员在PlaceTypeCategory模型中添加了defaultScope函数:

    public function defaultScope()
{
  return array(
    'order' => 'name ASC'
  );
}

我不知道这种可能性。

如果将列名更改为其他名称而不是名称,会发生什么情况?我的意思是,因为它是MySQL关键字之一,所以什么也没发生。还是一样的错误。如果在中使用SQL添加新关系,则会添加一个order by。对于$criteria->with=array'placeType',它按placeType.name添加订单对于$criteria->with=array'placeType.placeTypeSpecialistics',它不添加任何内容。。对于$criteria->with=array'placeTypeCategory',它添加了按名称排序的怪异..天哪,我发现了问题。。前一位开发人员在PlaceTypeCategory模型中添加了:公共函数defaultScope{return array'order'=>'name ASC';}!无论如何谢谢你!