2014-03-14 2 views
0

나는 다음과 같은 모델을 가지고에 hasMany의 관계에서 행을 인출하는 방법 :는 CakePHP의

class AppModel extends Model { 
    public $actsAs = array('Containable'); 
    public $recursive = -1; 
} 

class City extends AppModel { // for "cities" table 
    public $belongsTo = 'Country'; 
} 

class Country extends AppModel { // for "countries" table 
    public $hasMany = 'City'; 
} 

는 ..how 나는 국가의 도시를 가져 않습니다. 이런 식으로 뭔가 내가 알아 내려고 해요 : 나는 도시에게 내가 나라를 위해 호출 할 때마다 가져 오는 방지하기 위해 이러한 방식으로 AppModel이를 설정 한

$countries = $this->Country->first(); // fetch a country 
$cities = $country->city->find('all'); // get the cities for that country 

. 때로는 모든 도시를 검색 할 필요가 없으므로 기본 조인을 원하지 않습니다. 그러나 주어진 국가의 도시를 가져오고 싶을 때가 있습니다.

$cities = City->find('all', array(
    'conditions' => array(
     'City.country_id' => $country['Country']['id'] 
    ) 
)) 

이 관계는 모델에 설립 된 후 도시에 액세스하는 가장 편리한 방법입니다 : 다음은 내가 알고있는 유일한 방법입니다? 그렇다면 왜 내가 $ belongsTo 및/또는 $ hasMany를 귀찮게하는지 이해하지 못합니다. 감사합니다

답변

0

당신이 CakePHP 모델 관계를 사용하고 있기 때문에 Join 쿼리를 작성할 필요가 없습니다.

우선은

$countries = $this->Country->find('all'); 

당신은 배열 형식으로 $에서 국가의 도시를 얻을 수

class Country extends AppModel { // for "countries" table 
     public $recursive = 1; 
     public $hasMany = 'City'; 
    } 

그냥 다음과 같은 코드를 작성 나라

의 모델에 다음을 추가합니다.

0

연관된 모델은 먼저 기본 모델을 찾은 다음 첫 번째 쿼리를 기반으로 연결된 모델을 찾습니다. 따라서 관련 모델 조건을 기반으로 제한하는 것은 불가능합니다.

  • Join
  • 역방향 찾기를 수행 찾을 수 있습니까 : 당신이 관련된 모델을 기반으로 주요 모델을 제한하려는 경우에 따라서, 당신은 두 가지 옵션이 있습니다. 조건에 따라 City을 찾을 수 있으며 연결된 주소는 Country입니다. 예를 들어 (당신이 CountriesController에있어 가정) :

    $this->Country->City->find('all', array(
        'conditions' => array(
         //your conditions 
        ), 
        'contain' => array('Country') 
    ));