我正在 Catalyst 框架中使用 DBIx::Class 。我的本地目标是在用户和任务之间添加新的多对多关系。但我需要一个小技巧。用户可以在任务中扮演不同的角色(例如“工人”或“旁观者”)。
所以我有users包含这些字段的表:
I have task包含这些字段的表:
我有关系表用户任务与这些字段:
我已经设置了 has_manyusers to 用户任务, has_many 来自tasks to 用户任务以及对应的多对多关系users and tasks。这个简单的部分按其应有的方式工作。
然后,例如,我想获取我的用户列表,包括用户在 $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自定义结果集以在我的查询中获取带有用户任务角色的附加字段?
首先多对多不是关系。它是一个访问器(关系桥梁)。
其次,DBIx::Class 拥有出色的文档。看一下连接/预取。
在你的 ResultSet/User.pm 文件中你应该有类似的内容:
sub with_task_role {
my ($self, $task_id) = @_;
return $self->search({
'task.task_id' => $task_id,
},
{
join => { 'user_task' => 'task' },
prefetch => { 'user_task' => 'task' },
},
);
}
PS:抱歉,我没看到 Ashley 已经回答了
PS2:最后一行“})”之前应该只有“)”(已修复)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)