Perl DBIx::Class-此关系缓存在哪里?

Perl DBIx::Class-此关系缓存在哪里?,perl,dbix-class,Perl,Dbix Class,我有一个订单实体和一个地址实体,在我的Schema::Result::Order模块中,我有一个简单的归属关系: __PACKAGE__->belongs_to( "address", 'Schema::Result::Address', { addressid => 'addressid' }); 我使用DBIC_TRACE=1运行此代码: my $order = $schema->

我有一个订单实体和一个地址实体,在我的
Schema::Result::Order
模块中,我有一个简单的归属关系:

__PACKAGE__->belongs_to( "address", 'Schema::Result::Address', 
                                             { addressid => 'addressid' });
我使用DBIC_TRACE=1运行此代码:

my $order = $schema->resulset('Order')->find($id);
my $add1 = $order->address;
my $add2 = $order->address;
我只看到一个
选择。。。从ADDRESS…
查询,显然第二个
$order->ADDRESS方法没有命中数据库

这可能是一个简单的问题,但地址对象缓存在哪里?(在
$order
对象中?)


其次,这种缓存是否可配置(即我是否可以将DBIC配置为不缓存这些关系)?

我认为,按照您的订单地址关系,您的订单地址只有一个:

__PACKAGE__->belongs_to( "address", 'Schema::Result::Address', 
                                            { addressid => 'addressid' });
如果您的订单有多个地址,您需要:

__PACKAGE__->has_many( "address", 'Schema::Result::Address', 
                                            { addressid => 'addressid' });
然后,您可以通过多种方式检索地址:

my $address_rs = $order->search_related('address',{});
while(my $row = $address_rs->next) {
#$row has an address record
}
我不确定在这种情况下缓存是如何工作的

my $order = $schema->resulset('Order')->find($id);
my $add1 = $order->address;
my $add2 = $order->address;
但如果您像这样访问地址记录:

my $address_rs = $order->search_related('address',{});
您可以使用查询属性对其进行控制:


找到了答案:它缓存在
$order->{u relationship\u data}->{address}

尚未确定是否可以禁用该缓存