2

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;

クエリは1つしか表示されないSELECT ... FROM ADDRESS ...ため、2番目の$order->addressメソッドはデータベースにアクセスしていないようです。

したがって、これは簡単な質問かもしれませんが、アドレスオブジェクトはどこにキャッシュされますか?($orderオブジェクト内?)

次に、このキャッシュは構成可能ですか(つまり、これらの関係をキャッシュしないようにDBICを構成できますか)。

4

2 に答える 2

1

私はあなたが関係に対処するためにあなたの注文を持っている方法はあなたが注文に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',{});

クエリ属性で制御できます。

https://metacpan.org/module/DBIx::Class::ResultSet#cache

于 2011-11-02T01:00:55.530 に答える
0

答えが見つかりました:それはにキャッシュされてい$order->{_relationship_data}->{address}ます。

そのキャッシュを無効にできるかどうかはまだ決定していません。

于 2011-11-03T16:22:15.917 に答える