我尝试找出为什么以及在我使用(CDCriteria)时添加了“orderBy”子句但在互联网上没有任何内容,并且无法在代码中找到..
我有3个表定义地点类型(id,每个名称): 分类>活动>专业
我有桌位:
id |名字| place_type_id | place_type_spe_id
我在Place模型中有几个已定义的关系:
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(actiivty)模型中定义的关系:
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.
ORDER BY子句是:
ORDER BY distance ASC, placeType.name ASC, name ASC
$criteria->with = array('placeType.placeTypeCategory');
会按顺序添加此订单..
我的问题是:
为什么要添加它以及如何忽略它.. 感谢
答案 0 :(得分:0)
我发现了问题。
上一个开发者在PlaceTypeCategory模型中添加了defaultScope函数:
public function defaultScope()
{
return array(
'order' => 'name ASC'
);
}
我不知道这种可能性。