2011-03-07 4 views
1

Yii의 관련 모델 정보에 액세스하려고하고 있으며 메서드를 만들어야합니다. 방법은 ... 컨트롤러 나 모델에관련 활성 레코드 - 컨트롤러 또는 모델 방법?

시나리오를 이동해야하는 경우 임 확실하지 않다 : - 스테이션 스토어의 '하나했습니다'- 상점 스테이션합니다 ('저장'테이블이있다 '에 속하는' 'station_id'열)

스테이션 (스테이션/뷰/1)에 대한 상세보기에서 해당 스테이션에 스토어가있는 날씨를 확인하고 싶으면 해당 스토어에서 ID를 반환하고 싶습니다 .

그래서 제 질문은 다음과 같습니다

1) 내가이 정보를 찾아 컨트롤러 또는 모델에 넣어하는 방법을 만들 수 있습니까?

2) 스테이션에이 정보 또는 Store를 요청해야합니까?

3) 컨트롤러가 모델과 뷰 사이의 접착제이므로 컨트롤러에이 메서드를 추가하는 것이 좋습니다. 그러나 YII 년에는 뷰 파일에서 다음을 가지고 일반적인 관행을 보인다보기 당신이 관계를 설정할 수 있습니다 모델에서 모델

답변

1

와 직접 상호 작용처럼 날 것으로 보인다

CHtml::listData(Company::model()->findAll() 

활성 레코드를 사용하는 경우 관계 함수에서 스테이션 모델과 상점 모델 사이의 관계를 나타냅니다. Store의 ID를 얻는 것은 하나의 짧은 코드 행 ($ storeId = $ model-> store-> id;와 같은 것)을 사용하여 가능합니다. 따라서이 코드를 컨트롤러에 쉽게 넣을 수 있으며 컨트롤러를 기울여야합니다 (기울기 컨트롤러, 뚱뚱한 모델).

스테이션의 ID를 이미 알고 있기 때문에 스토어 스테이션을 '요청'해야합니다.

보기와 모델 사이에 추가 논리가 필요하지 않으면 컨트롤러를 건너 뛸 수 있습니다. 그러나 승인과 같은 것을 잊지 마십시오.

+0

아, Yii 그냥 훨씬 더, 감사합니다 :) – djt

0

그래,

당신은 액티브 레코드 관계를 사용하고 있기 때문에이 모든 당신이

$station = Station::model()->findAll(); 

$station->store 

을해야 할 것입니다 그리고 지금 당신이 데이터베이스의 저장소 개체에 액세스 할 수 있습니다, 그래서 당신은

을 할 수
$station->store->id 
$station->store->name 

예 YII 놀랍습니다 :)하지만 그건 단지 액티브입니다 :)

일반적인 관행은 컨트롤러와 의사 소통하는 것이지 모델에서 직접 볼 수는 없습니다. 컨트롤러는 유효성 검사를 처리 한 다음 유효성 검사를 모델에 전달합니다.

관련 문제