LyleK has asked for the wisdom of the Perl Monks concerning the following question:

Hi folks, I have noticed that when I create a might_have relationship for a class, the related object gets cached (in _relationship_data). That's handy. However, I can't for the life of me figure out a way to clear that cache, force it to reload the proxy object. Calling ->discard_changes() doesn't do it. Any ideas? The reason I need this is that I'm creating a custom might_have relationship called current_version that has a restriction to make it find the current version from the versions table. So sometimes I need to refresh in case there is a newer version in the DB. Maybe I'm just abusing the notion of might_have?

Replies are listed 'Best First'.
Re: Clearing relationship cache
by Anonymous Monk on Dec 03, 2015 at 00:11 UTC
    What are you talking about , what modules, what context?
      Sorry. This is in a DBIx::Class::Row.

        I "investigate"

        grep sub\s+might_have

        grep sub\s+add_relationship

        grep relationship_data

        grep relationships

        $self->_relationships(\%rels); $new->{_relationships} = { %{$new->{_relationships}||{}} }; my $rel_names = $self->result_source->{_relationships}; _relationships => {}, # copying them as-is is bad taste

        So there doesn't appear remove_relationships

        Every object and its mother (row and source) appears to get/carry a list of _relationships

        which is just a hash ref accessed/modified using _relationships

        So if you're trying to modify it, but its being cached, you need to modify the other thing (resultsource...whatever)

        If you post a simple test case, code I can run, say something that depends on SQLite, creates the tables and everything needed for test case.... I'll look some more :)