我有一个Order实体和一个Address实体,在我的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;
我只看到一个SELECT ... FROM ADDRESS ...
查询,显然第二个$order->address
方法没有访问数据库。
所以这可能是一个简单的问题,但地址对象在哪里被缓存? (在$order
对象中?)
其次,这个缓存是否可配置(即我可以将DBIC配置为不缓存这些关系)吗?
答案 0 :(得分:1)
我认为您订单处理关系的方式只有一个地址:
__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',{});
您可以使用查询属性来控制它:
答案 1 :(得分:0)
找到答案:它缓存在$order->{_relationship_data}->{address}
。
尚未确定是否可以禁用缓存。