[Dbix-class] $self->related_resultset( 'user_role' ) returning App::DB::ResultSet
Bill Moseley
moseley at hank.org
Thu Jul 16 00:58:07 GMT 2015
Ok, I have an explanation.
We did a release and App::DB::ResultSet::UserRole is a new class. But, we
cache User objects in Memcached (as a DBIC row).
And the old code did this:
$user->search_related( 'user_role', { ... } );
which then populated $user->{related_resultsets}{user_role} with the
(default?) App::DB::Result class instance (and saved it in Memcached).
So, when we rolled out the new code it was using cached $user objects so
$user->{related_resultsets}{user_role} was the base ResultSet object which
didn't have the "my_method" method.
So, it may be as simple as delete $user->{related_resultsets} after
fetching the $user object from cache. Can't be that expensive to look up
the relationships.
Or we could be disruptive and blow away the cache at release time. But,
it's not a problem that happens very often.
I wonder if it makes sense for DBIC to not save related_resultset in
objects if there isn't a specific one -- which would have prevented this.
Seems like quite an edge-case.
On Wed, Jul 15, 2015 at 4:45 PM, Bill Moseley <moseley at hank.org> wrote:
>
>
> On Wed, Jul 15, 2015 at 3:15 PM, Francisco Obispo <francisco at obispo.link>
> wrote:
>
>> The result of
>>
>> $self->related_resultset( 'user_role' )
>>
>> is a App::DB::ResultSet
>>
>
> But it should return an App::DB::ResultSet::UserRole object. "my_method"
> is in the App::DB::ResultSet::UserRole class.
>
> return $self->related_resultset( 'user_role' )->my_method->count > 0;
>
>
> When I printed Dumper $self->{related_resultsets} (in the
> related_resultset() method) when it was NOT working I was getting:
>
> *Note the class:*
>
> 'user_role' => bless( {
> 'pager' => undef,
> 'attrs' => {
> 'is_depends_on' => 0,
> 'cascade_copy' => 0,
> 'accessor' => 'multi',
> 'alias' => 'me',
> 'bind' =>
> 'ARRAY(0x7fdf9ac59198)',
> 'join_type' => 'LEFT',
> 'where' =>
> 'HASH(0x7fdf9ac58fd0)',
> 'cascade_delete' => 0
> },
> 'cond' =>
> $VAR1->{'user_role'}{'attrs'}{'where'},
> '_result_class' =>
> 'App::DB::Result::UserRole',
> 'result_source' => bless( {
> '_columns'
> => 'HASH(0x7fdf85857f40)',
> 'schema' =>
> $VAR1->{'user_pref'}{'result_source'}{'schema'},
>
> '_unique_constraints' => 'HASH(0x7fdf9696ffc8)',
>
> '_relationships' => 'HASH(0x7fdf8585b0f8)',
>
> 'result_class' => 'Appi::DB::Result::UserRole',
>
> 'source_name' => 'UserRole',
>
> 'resultset_class' => 'App::DB::ResultSet::UserRole',
>
> '_columns_info_loaded' => 0,
>
> 'resultset_attributes' => 'HASH(0x7fdf85857a48)',
> '_primaries'
> => 'ARRAY(0x7fdf93dcb030)',
>
> '_ordered_columns' => 'ARRAY(0x7fdf858417e8)',
> 'name' =>
> 'user_role'
> },
> 'DBIx::Class::ResultSource::Table' )
> }, '*App::DB::ResultSet*' )
>
>
>
> And then when it is working correctly the Dump shows this:
>
> 'user_role' => bless( {
> 'result_source' => bless( {
>
> 'source_name' => 'UserRole',
> 'name' =>
> 'user_role',
>
> '_columns_info_loaded' => 0,
> '_primaries'
> => 'ARRAY(0x4ceaea0)',
> 'schema' =>
> 'App::DB=HASH(0x2c458d0)',
>
> 'result_class' => 'App::DB::Result::UserRole',
>
> '_relationships' => 'HASH(0x783f628)',
>
> 'resultset_attributes' => 'HASH(0x7834010)',
>
> 'resultset_class' => 'App::DB::ResultSet::UserRole',
>
> '_ordered_columns' => 'ARRAY(0x7825410)',
> '_columns'
> => 'HASH(0x7837d20)',
>
> '_unique_constraints' => 'HASH(0x4d17b40)'
> },
> 'DBIx::Class::ResultSource::Table' ),
> 'attrs' => {
> 'bind' =>
> 'ARRAY(0x7b1ace0)',
> 'cascade_delete' => 0,
> 'accessor' => 'multi',
> 'cascade_copy' => 0,
> 'is_depends_on' => 0,
> 'alias' => 'me',
> 'where' =>
> 'HASH(0x7b71fe0)',
> 'join_type' => 'LEFT'
> },
> 'pager' => undef,
> '_result_class' =>
> 'App::DB::Result::UserRole',
> 'cond' =>
> $VAR1->{'user_role'}{'attrs'}{'where'}
> }, '*App::DB::ResultSet::UserRole*' )
> };
>
> --
> Bill Moseley
> moseley at hank.org
>
--
Bill Moseley
moseley at hank.org
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.scsys.co.uk/pipermail/dbix-class/attachments/20150715/54a1f0df/attachment-0001.htm>
More information about the DBIx-Class
mailing list