0

我有一个 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’
4

1 回答 1

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' }},
});

看来您做的事情与我所做的非常相似:存储防火墙规则。您可能希望规则与设备直接相关,并且接口是规则的可选属性,因为某些供应商没有特定于接口的规则(检查点)。

于 2014-08-17T07:05:23.000 回答