[CDBI] Re: Searching using a might_have relationship.

"Edward J. Sabol" <sabol-2oVx0MVsMgiP/[email protected]>
Newsgroups gmane.comp.lang.perl.modules.class-dbi
Message-ID <[email protected]>
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

Hope this helps,
Ed
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.