我正在使用Catalyst框架中的DBIx :: Class。我的本地目标是在用户之间添加新的多对多关系,比方说,任务。但是我需要一个小技巧。用户可以在任务中拥有不同的角色(如“工作人员”或“旁观者”)。DBIx:带有附加属性的类多对多关系
所以我用户表这些字段:
- ID
- 名
我任务表这些字段:
- ID
- 标题
- 描述
和我有关系表user_tasks这些领域:
- user_id说明
- TASK_ID
- 作用
我有的has_many建立从用户到user_tasks,从的has_many任务到user_tasks和相应用户和任务之间MANY_TO_MANY关系。这个平凡的部分就像它应该的那样工作。
然后,例如,我想我的用户列表,包括在任务由$ TASK_ID识别用户的角色:
my $users = $schema->resultset('User')->with_task_role($task_id);
while (my $u = $users->next) {
print "User: " . $u->name . ", role: " . $u->get_column('task_role');
}
所以我应该怎么编写这个with_task_role定制的ResultSet得到这额外的字段用户在我的查询中的任务角色?
我已经知道DBIx :: Class有一个很好的文档,因为我先看了那里。我已经尝试了上面的这段代码,但是它不能从这个查询中获得** user_tasks.role **字段! – 2011-05-24 15:58:48
嗯。我请求原谅。这段代码确实有效,那是我的实现,它没有(我使用了连接或预取,而不是在一起)。 – 2011-05-24 16:12:28
很高兴听到它的工作,它应该没有预取工作也(只有加入),但然后你每次使用user_tasks或任何任何列时,你会打数据库。 – 2011-05-24 16:20:43