2013-08-26 1 views
0

У меня есть проблема в ORH Kohana при загрузке объектов детьми.
Мои таблицы базы данных выглядит, что:Kohana orm - получить объект ребенка и большого ребенка

-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 

и мои модели:

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' 
     ), 
    ); 
} 

Мне нужно получить объект объекта, включая название страны и города. Я нашел это:

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

here но он возвращает города идентификаторы вместо городов объектов.
Итак, мой вопрос: как получить объекты объекта с дочерними объектами в представленных таблицах?

ответ

0

Вы можете увидеть запрос, запущенный таким образом:

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

Я считаю, что главная проблема заключается в ваших отношениях. Объекты find_all с городами и городами: страны выглядят отлично.

Что вы, возможно, захотите рассмотреть, следуя соглашению об именовании Коханы ORM. Таким образом, таблицы будут объектами, городами и странами, все они будут иметь идентификатор в качестве основного ключа. В таблице объектов будет столбец city_id (со ссылкой на идентификатор в таблице городов), а в городах будет указан country_id, который будет «указывать» на столбец id в таблице стран. Если вы сохраните имена таблиц, столбцов и моделей, вам даже не нужно будет определять имена таблиц или внешние ключи в ваших моделях отдельно.

Теперь, поскольку каждый объект имеет назначенный ему город, и каждый город может иметь от нуля до 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

 Смежные вопросы

  • Нет связанных вопросов^_^