Re: [CDBI] Re: Searching using a might_have relationship.

Matt S Trout <dbix-class-uY5y5/[email protected]>
Newsgroups gmane.comp.lang.perl.modules.class-dbi
Message-ID <[email protected]>
Edward J. Sabol wrote:
> Oliver Jeeves wrote::
>> Basically, I want to use a value from a might_have relationship to
>> search, and I don't want to have to do multiple SQL queries to do it.
>> Is there an easy way to do this?
> 
> No, I don't believe so. Support for might_have relationships could be better
> in CDBI. I think it's a weakness anyway. They are harder to populate than a
> has_many() and you cannot easily search() for them via the parent class.
> 
> You have a couple of options, I think.
> 
> (1) Instead of
> 
>  MyDB::A->search(other => 'foo');
> 
>     you can use B's search() method and then MyDB::A->retrieve() the IDs
>     that you found in B, like so:
> 
>  my @others = map { MyDB::A->retrieve($_->id) } MyDB::B->search(other => 'foo');
> 
>     Relatively easy, but not very efficient.
> 
> (2) You could use set_sql(), like so:
> 
>  MyDB::A->set_sql('others' => <<"");
> SELECT __ESSENTIAL(a)__
> FROM   __TABLE(MyDB::A=a)__,
>        __TABLE(MyDB::B=b)__,
> WHERE  __JOIN(a b)__
> AND    b.other = ?
> 
>  MyDB::A->search_others('foo');
> 
>     Refer to http://wiki.class-dbi.com/wiki/Using_joins for more info.
> 
> (3) You could use Class::DBI::Plugin::DeepAbstractSearch. Not sure if it
>     supports might_have's or not, though I suspect it does.
> 
> http://search.cpan.org/~sriha/Class-DBI-Plugin-DeepAbstractSearch/DeepAbstractSearch.pm

Class::DBI::Sweet certainly does and is IMO a rather cleaner implementation, 
albeit with a silly name.

-- 
      Matt S Trout       Offering custom development, consultancy and support
   Technical Director    contracts for Catalyst, DBIx::Class and BAST. Contact
Shadowcat Systems Ltd.  mst (at) shadowcatsystems.co.uk for more information

+ Help us build a better perl ORM: http://dbix-class.shadowcatsystems.co.uk/ +
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.