Я думаю, что если у вас есть заказ с адресом, у вас будет только один адрес для заказа:
__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',{});
вы можете управлять им с помощью атрибутов запроса:
https://metacpan.org/module/DBIx::Class::ResultSet#cache