2012-11-07 6 views
0

폴더에 폴더와 항목이 들어 있습니다. 모든 mysql은 명확하게하기 위해 축약되었습니다. yii에서 열 이름의 모호성을 제거하는 방법 MANY_MANY 관계

CREATE TABLE folder 
    folder_id INT, 
    name VARCHAR(32), 
    sort_weight INT 

CREATE TABLE item 
    item_id INT, 
    name VARCHAR(32) 

물론의 연결 테이블

당신이 (종류의 리눅스 파일 시스템의 하드 링크와 같은) 하나 개 이상의 폴더에있을 수있는 하나 개의 항목을 추측 할 수 있듯이
CREATE TABLE item_folder 
    folder_id INT, 
    item_id INT, 
    sort_weight INT 

그 폴더가 통지 sort_weight 너무 다른 폴더 안에 정렬 될 수 있기 때문에 너무. 지금은 YII를 사용하고 있는데이 같은 항목 모델의 좋은 관계를 가지고

public function relations() 
{ 
    return array(
     'folderitems' => array(self::MANY_MANY, 'Folder', 'item_folder(item_id, folder_id)'), 
    ); 
} 

문제는 내가 멋진 AR 요청을하려고하고 내가 그것을 정렬하려고 할 때이 문제가 있다는 것입니다. 내 AR 요청 :

$items = Item::model()->with(array(
    'folderitems' => array(
    'condition' => "folderitems.folder_id = $someid" 
    ), 
))->findAll(array('order'=> "folderitems.sort_weight")); 

이제 문제는이 같은 구문을 대신 item_folder.sort_weight에 의해 정렬의이 folder.sort_weight에 의해 정렬한다는 것이다.

[...]))->findAll(array('order'=> 'sort_weight2')); 

작동 :

나는 item_folder.sort_weight2 말을 시도 할 필드의 이름을 변경합니다.

그러나 나는 같은 두 이름을 유지하고 unknown column을 말한다

[...]))->findAll(array('order'=> 'item_folder.sort_weight')); 

시도합니다.

질문은 - 정확하게 모호하게 만드는 방법입니다.

답변

1

은 열 이름이 함께 결합되는 두 개 이상의 테이블에 표시되면

[...]))->findAll(array('order'=> 't.sort_weight')); 

http://www.yiiframework.com/doc/guide/1.1/en/database.arr#disambiguating-column-names

"는, 그것의 테이블의 별명에 열 이름을 앞에 붙여.이 작업이 완료 명확화 할 필요가 시도 이름.

관계형 AR 쿼리에서 관계형 테이블의 별칭 이름은 기본적으로 해당 관계 이름과 같지만 기본 테이블의 별칭 이름은 t로 고정됩니다.