2013-08-26 1 views
0

개체 자식로드시 Kohana ORM에 문제가 있습니다. 나는 국가 및 도시의 이름을 포함하여 객체의 객체를 얻을 필요가Kohana orm - 자식 및 그물 자식 개체 얻기

class Model_Object extends ORM 
{ 
    protected $_table_name = 'objects'; 
    protected $_table_columns = array(
     'id' => NULL,'name' => NULL, 
     'title' => NULL, 
     'author' => NULL, 
     'city' => NULL, 
     'description' => NULL, 
     'access' => NULL, 
     'created' => NULL 
    ); 
    protected $_primary_key = 'id'; 
    protected $_has_one = array(
     'city'=>array(), 
     'author'=>array(
      'model'=>'User', 
      'foreign_key'=>'user_id', 
     ) 
    ); 
} 

class Model_City extends ORM 
{ 
    protected $_table_name = 'cities'; 
    protected $_table_columns = array('city_id'=>NULL,'city_name'=>NULL); 
    protected $_primary_key = 'city_id'; 
    protected $_has_one = array('country'=>array(
     'model'=>'country', 
     'foreign_key'=>'country', 
    )); 
    protected $_belongs_to = array(
     'objects'=>array(), 
    ); 
} 

class Model_Country extends ORM 
{ 
    protected $_table_name = 'countries'; 
    protected $_table_columns = array(
     'country_id'=>NULL, 
     'country_name'=>NULL, 
    ); 
    protected $_primary_key = 'country_id'; 
    protected $_belongs_to = array(
     'cities'=>array(
      'model'  => 'city', 
      'foreign_key' => 'country' 
     ), 
    ); 
} 

:

-objects (something like "houses", but objects sounds better in my opinion) 
    -id 
    -name 
    -title 
    -author 
    -city (id link to cities.city_id) 
    -description 
    -access 
-cities 
    -city_id 
    -country (id link to countries.country_name) 
    -city_name 
-countries 
    -country_id 
    -country_name 

내 모델 :
내 데이터베이스 테이블 것으로 보인다. 나는이 발견

ORM::factory('Object')->with('City')->with('City:Country')->find_all(); 

here을하지만 대신 도시 객체의 ID 도시를 반환합니다.
제 질문은 : 제시된 테이블에서 자식 개체를 사용하여 개체의 개체를 얻는 방법은 무엇입니까?

답변

0

당신은이 방법으로 실행중인 쿼리를 볼 수 있습니다

echo View::factory('profiler/stats'); 

내가 큰 문제가 당신의 관계라고 생각합니다. 도시와 도시가있는 find_all 객체 : 국가가 정상적으로 보입니다.

Kohana ORM 명명 규칙을 따르는 것이 좋습니다. 따라서 테이블은 객체, 도시 및 국가가 될 것이며, 모두 ID를 기본 키로 사용합니다. Objects 테이블에는 city_id 열 (cities 테이블의 id 참조)이 있고 country_id는 countries 테이블의 id 열을 "가리 킵니다". 테이블, 컬럼 및 모델의 이름을 올바르게 유지하면 모델의 테이블 이름이나 외래 키를 따로 정의 할 필요조차 없습니다.

이제 모든 객체에는 할당 된 도시가 있고 모든 도시에는 0에서 n 개의 객체가있을 수 있으므로 객체 모델에서 선언하고자하는 객체가 도시에 속합니다. 그리고 도시 모델에서는 HAS MANY 개체를 사용합니다.

도시 또한 국가 및 국가가 매우 많습니다. 이제

당신은 다음과 같은 데이터를 얻을 수 있어야합니다 :

$objects = ORM::factory('Object')->with('City')->with('City:Country')->find_all(); 

$objects = $cityObject->objects->find_all(); 

$cities = $countryObject->cities->find_all(); 

등의 관계에 대한

더 찾을 수 here