В моем коде у меня есть три класса следующим образом: Forum
, Forum::Thread
и Forum::Post
Как создать вложенную связь has_many или belongs_to с DBIx :: Class?
То, что я хочу сделать, это создать belongs_to-отношения с Forum::Post
класса к Forum
класса и наоборот с has_many, предпочтительно без создания для него настраиваемой функции. (Это, по общему признанию, больше интеллектуальных упражнений, чем техническое ограничение или актуальная проблема, но если это возможно, я бы очень хотел узнать.)
Записанные строки содержат мое намерение с отношениями, но в их нынешнем формы, они не работают. Я просидел в документации, но не могу найти что-либо относящееся к этому конкретному делу.
Любые указатели?
Класс форум:
package Schema::Result::Forum;
use Moose;
extends qw/DBIx::Class/;
__PACKAGE__->load_components (qw/Core/);
__PACKAGE__->table ('forum');
__PACKAGE__->add_columns (
id => {
is_auto_increment => 1,
data_type => 'integer',
},
);
__PACKAGE__->set_primary_key ('id');
__PACKAGE__->has_many (threads => 'Schema::Result::Forum::Thread');
#This is the interesting line
#__PACKAGE__->has_many (posts => 'threads' => 'forums');
1;
Класс резьбы:
package Schema::Result::Forum::Thread;
use Moose;
extends qw/DBIx::Class/;
__PACKAGE__->load_components (qw/Core/);
__PACKAGE__->table ('forum_thread');
__PACKAGE__->add_columns (
id => {
is_auto_increment => 1,
data_type => 'integer',
},
forum => {
data_type => 'integer',
},
);
__PACKAGE__->set_primary_key ('id');
__PACKAGE__->belongs_to (forum => 'Schema::Result::Forum');
__PACKAGE__->has_many (posts => 'Schema::Result::Forum::Post');
1;
Сообщение Класс:
package Schema::Result::Forum::Post;
use Moose;
extends qw/DBIx::Class/;
__PACKAGE__->load_components (qw/Core/);
__PACKAGE__->table ('forum_post');
__PACKAGE__->add_columns (
id => {
is_auto_increment => 1,
data_type => 'integer',
},
thread => {
data_type => 'integer',
},
);
__PACKAGE__->set_primary_key ('id');
__PACKAGE__->belongs_to (thread => 'Schema::Result::Forum::Thread');
#This is the other interesting line
#__PACKAGE__->belongs_to (forum => 'thread' => 'forum');
1;
PS: дополнительные столбцы для хранения фактического содержания были опущены краткость.
Что вы ожидаете это вложенные отношений делать? Что означают '$ post-> forum' или' $ forum-> post' в этих условиях? Не можете ли вы просто использовать '$ post-> thread-> forum' и' для моего потока $ ($ forum-> threads) {для my $ post ($ thread-> posts) {}} 'делать то, что вы хотите ? –
@Phillip Potter: Я немного опасаюсь заставлять; что я в конце концов хочу достичь с помощью '$ forum-> posts' является * одним * SQL-запросом, который извлекает все данные. $ post-> forum - это просто стенография форума $ post-> thread->, так что это менее интересно, я полагаю. –
Я предлагаю вам подписаться на список рассылки DBIx :: Class и спросить там. Я не совсем уверен, как делать то, что вы просите. –