我有一个DBIx类架构;
具有多个接口的设备
接口有许多应用规则
每个规则都有许多规则条目。
我想搜索特定设备名称和规则名称的所有规则条目。
我还在学习DBIx所以我不知道这是否是最有效的方式。
我是这样做的;
my $rs = $self->search( { devicename => ‘DeviceA’ } )->search_related('interfaces')->search_related(’Rules’, { rulename => ‘RuleA’ } )->search_related(‘RuleEntries’, {},
{ columns => [qw/source destination port/], result_class => 'DBIx::Class::ResultClass::HashRefInflator'} );
我想要做的是将'RuleName'作为我的结果集的列。
目前我在名为RuleA的接口上获取带有RuleName的DeviceA的所有规则条目,返回的列是
‘source destination port’.
我希望这看起来像
‘rulename source destination port’
答案 0 :(得分:1)
由于您已经限制了规则名称,因此从数据库中查询它是没有意义的。
除此之外,你应该总是搜索你想要回来的类型的对象,在你的情况下是规则条目:
my $rs = $schema->resultset('Rule_Entries')->search({
'rel_device.name' => 'DeviceA',
'rel_rule.name' => 'Rule',
},{
columns => [ 'rel_rule.name', 'me.source', 'me.destination', 'me.port' ],
join => { rel_rule => { rel_interface => 'rel_device' }},
});
看起来你做的事与我的做法非常相似:存储防火墙规则。您可能希望规则与设备直接相关,并且接口是规则的可选属性,因为某些供应商没有特定于接口的规则(检查点)。