Русскоязычный форум, посвященный фреймворку Kohana
http://forum.kohanaframework.su/

Конфликт связи _has_many с модулем Auth
http://forum.kohanaframework.su/viewtopic.php?f=33&t=324
Страница 1 из 1

Автор:  podpole [ 19 авг 2012, 17:30 ]
Заголовок сообщения:  Конфликт связи _has_many с модулем Auth

Добрый день!
Не сталкивался ли кто ни будь с такой проблемой:
Использую модуль Auth, у меня присутствует модель User, соответственно в бд есть таблица users, roles, и roles_users - связь этих таблиц видимо определена где-то в недрах ядра... Я создал модель post, планирую организовать публикацию пользователями материалов на сайте. Соответственно связь - один ко многим (один пользователь может иметь несколько публикаций, каждая публикация может быть опубликована только от одного автора).
Для создания связи в модель User добавляю:
Код:
protected $_has_many = array(
        'posts' => array(
            'model' => 'post',
            'foreign_key' => 'owner_id',
        )
    );

В модель Post:
Код:
protected $_belongs_to = array(
        'owner' => array(
            'model' => 'user',
            'foreign_key' => 'owner_id',
        )
    );

Что с моей точки зрения затирает нативную связь юзеров с ролями, и при обращении к этой связи (при авторизации, регистрации и т.п.) возникает ошибка:
Код:
ErrorException [ Notice ]: Undefined index: roles

Есть идеи, как правильно преодолеть данный конфликт?

Автор:  Sergey [ 19 авг 2012, 19:45 ]
Заголовок сообщения:  Re: Конфликт связи _has_many с модулем Auth

podpole писал(а):
Использую модуль Auth, у меня присутствует модель User, соответственно в бд есть таблица users, roles, и roles_users - связь этих таблиц видимо определена где-то в недрах ядра...


Код:
  /**
   * A user has many tokens and roles
   *
   * @var array Relationhips
   * @access protected
   */
  protected $_has_many = array(
    'user_tokens' => array('model' => 'user_token'),
    'roles'       => array('model' => 'role', 'through' => 'roles_users'),
  );

Автор:  podpole [ 19 авг 2012, 20:30 ]
Заголовок сообщения:  Re: Конфликт связи _has_many с модулем Auth

Sergey, спасибо.
У меня была такая же идея, но меня смущает следующее:
- Со следующими релизами kohana это может перестать работать, т.к. мы копируем нативные связи в application, и при апдейте в ядре, изменения не будут внесены в нашу модель;
- У меня не создана модель role и user_token, ех тоже вероятно придется дублировать?

Автор:  Sergey [ 19 авг 2012, 20:43 ]
Заголовок сообщения:  Re: Конфликт связи _has_many с модулем Auth

podpole писал(а):
- Со следующими релизами kohana это может перестать работать, т.к. мы копируем нативные связи в application, и при апдейте в ядре, изменения не будут внесены в нашу модель;


Это не так.
Обновления Kohana не имеют никакого отношения к вашим моделям и взаимосвязям описанным в них.
А если и выйдет что-то кардинально иное - вам в любом случае ковырять ваши модели.
Но так или иначе вы не меняете логику приложения, а только модели.

podpole писал(а):
- У меня не создана модель role и user_token, ех тоже вероятно придется дублировать?


Модель Role уже создана до вас, так же как и модель User. Всё таки не забывайте про иерархическую файловую систему Kohana. Но если вам нужно переопределить и/или дополнить любые существующие модели, то да — поместив их по адресу application/classes/model вы добьётесь этого.

Дублировать/создавать модели для связующих таблиц чаще всего не требуется

Автор:  podpole [ 19 авг 2012, 20:59 ]
Заголовок сообщения:  Re: Конфликт связи _has_many с модулем Auth

Sergey, большое спасибо. Внес в проект изменения, всё заработало.

Автор:  Sergey [ 19 авг 2012, 21:11 ]
Заголовок сообщения:  Re: Конфликт связи _has_many с модулем Auth

Велкам :)

Страница 1 из 1 Часовой пояс: UTC + 4 часа [ Летнее время ]
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/