2012-02-13 3 views
0

누구나 CDBCriteria 쿼리에서 'AS'문을 사용하는 방법을 알려 줄 수 있습니까?Yii CDBCriteria에서 SQL 'AS'문 사용하기

피곤하면 무엇이든 내 테이블의 열 이름을 배열에 가져오고 내 SQL 별칭은 표시하지 않습니다.

내가 내 모델 클래스에 추가하지만, 그것을 추가하는 몇 번의 시도 후를 선언 할 경우 확실하지 메신저 할 수 있습니다 생각합니다. 당신이 볼 수있는

다음

은 내 꺼야 '거리'내 별명입니다 :

$criteria= new CDbCriteria; 
    $criteria->select='*, 3963 * acos(cos(radians('.$distanceString['latitude'].')) * cos(radians(latitude)) * cos(radians('.$distanceString['longitude'].') - radians(longitude)) + sin(radians('.$distanceString['latitude'].')) * sin(radians(latitude))) AS distance'; 
    $criteria->condition=$sqlCondition; 
    $criteria->params=$sqlVariables; 
    $criteria->order='distance'; 

미리 감사드립니다. :)

답변

1

활성 레코드 클래스에 대해 CActiveDataProvider와 함께 사용합니까? 그렇다면 해당 클래스에서 거리를 정의하십시오.

0

사용 CDbCommand 대신

 
$rawData=Yii::app()->db->createCommand() 
    ->select('*, 3963 * acos(cos(radians('.$distanceString['latitude'].')) * cos(radians(latitude)) * cos(radians('.$distanceString['longitude'].') - radians(longitude)) + sin(radians('.$distanceString['latitude'].')) * sin(radians(latitude))) AS distance') 
    ->from('TableName') 
    ->where($sqlCondition) 
    ->order('distance')->queryAll(true,$sqlVariables); 

예. 함께 CArrayDataProvider

 
$dataProvider=new CArrayDataProvider($rawData); 
// $dataProvider->getData() will return a list of arrays.