2010-10-31 3 views
0

Я портирую приложение от Class::DBI до DBIx::Class и нуждаюсь в помощи. У меня есть таблица T с первичным ключом tid и другая таблица ChildT, которая связывает строку T с несколькими (дочерними) строками T. Как настроить отношения между T и ChildT, чтобы я мог найти всех детей экземпляра T. Вот раздели вниз версии этих двух таблиц:Настройка отношения «многие ко многим» таблицы с самим собой с DBIx :: Class

T: (id, name); 
ChildT: (rowid, tid, childid) 

tid и childid как ссылку на id столбец T.

Спасибо!

+0

Вы читали DBIx :: Class :: Manual - особенно Cookbook, в которой есть различные примеры выполнения отношений «многие ко многим»? Разве не объяснялось, что там не работает? Какая у вас ошибка? – rafl

+0

сделал. Документы «Поваренная книга» и «Отношения» объясняют, как это сделать, когда таблица ссылок содержит внешние ключи двух разных таблиц. Поэтому я знаю, как это сделать для Актера -> ActorRole <- Роль. Я хочу настроить что-то для (скажем) Актера -> CoStar <- Актер. Должен ли я настроить два отношения role_to в классе Costar - по одному для каждого внешнего ключа и два has_many отношения от Actor до класса Costar? Смущенный! –

ответ

0

Пожалуйста, не upvote я отвечаю на свой вопрос в надежде, что кто-то имеет такую ​​же проблему, или может помочь улучшить/исправить это -

В DBIx::Class::Relationship документы объясняют это достаточно ясно. В ChildT класса определяют belongs_to отношения к T с помощью внешнего ключа childid:

__PACKAGE__->belongs_to(parent => 'App::Schema::Result::T', 'childid'); 

В Т класса определяют has_many и many_to_many отношения с классом ChildT:

__PACKAGE__->has_many(childrecords => 'App::Schema::Result::ChildT', 'tid'); 
__PACKAGE__->many_to_many(children => 'childrecords', 'parent'); 

С этим $t->children дает все дочерние записи любого экземпляра T

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