2013-06-13 2 views
0

У меня есть простое приложение crud в Kohana 3.3, с несколькими различными типами данных или моделей. Скажем, эти модели:Kohana 3.3 структура таблицы

  • Пользователи
  • Места
  • Навыки

У меня есть таблица для каждой из этих моделей, но таблицы не связаны друг с другом каким-либо образом , Я пытался определить отношения с ORM, но я все еще смущен. В качестве примера:

У меня есть несколько мест. В каждом месте есть много пользователей.

Я знаю, что я могу определить, что с:

class Model_Location extends ORM { 

    /** 
    * A location has many users 
    * 
    * @var array Relationships 
    */ 
    protected $_has_many = array(
     'users' => array('model' => 'user'), 
    ); 

} 

Как я понимаю, я могу подключить два, ссылаясь на идентификатор родительского местоположения из строки в таблице пользователей. Однако, что, если каждый пользователь может принадлежать ко многим местоположениям? Должен ли я хранить сериализованные данные во внешнем ключе? Должен ли я создать «справочную таблицу»? Если да, то как это должно выглядеть?

Как я могу, например, запросить базу данных для местоположения и всех пользователей, подключенных к ней? Является ли ORM правильной технологией для такого рода вещей?

ответ

2

Вы ищете параметр through, посмотрите на docs.

Вам нужна дополнительная таблица, которая хранит идентификаторы обеих моделей

стол users_locations, поля: user_id и location_id (оба проиндексированы, конечно)

И в вашей модели:

protected $_has_many = array(
    'users' => array(
     'model' => 'user' 
     'through' => 'users_locations', 
    ), 
); 

И наоборот в пользовательской модели:

protected $_has_many = array(
    'locations' => array(
     'model' => 'location' 
     'through' => 'users_locations', 
    ), 
); 
+0

Ну ладно, спасибо. –