Yii-activeRecord-with添加了一个自动orderby子句
当我使用CDCriteria进行测试时,我试图找出添加orderBy子句的原因和位置,但在Internet上什么都没有,并且在代码中找不到 我有3个表,分别定义了地点类型id和名称: 类别>活动>专业 我有一张桌子: id |名称|地点|类型| id |地点|类型| spe | id 我在模型中定义了几个关系: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
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';}!无论如何谢谢你!