On 07/29/2014 03:50 PM, Peter Mottram wrote:
I'm using a Message class which has various m2m rels + link tables to
store things such as ProductReview and OrderComment.
I'd like to create an accessor in User which returns only the Message
rows that are ProductReviews as opposed to OrderComments/whatever. The
SQL I'm hoping to build is along these lines:
SELECT messages.*
FROM users me
JOIN messages messages ON me.users_id = messages.author
JOIN product_reviews product_reviews ON messages.messages_id =
product_reviews.messages_id
WHERE me.users_id = ?
I was hoping to use a custom join condition on a has_many relationship
but am getting nowhere. Maybe I should just add a simple sub to User
instead that uses the existing messages rel + some extra join
conditions? Suggestions welcome - simplified classes follow...
A condition within DBIC invariable represents a single JOIN. Using it to
represent a many-to-many is conceptually impossible, as it makes a lot
of foundation assumptions fall apart.
Your next message detailing the custom method is the correct way of
doing this. In fact if you look in the accessor generator for m2m, you
will realize it is doing exactly the same for you:
https://metacpan.org/source/RIBASUSHI/DBIx-Class-0.082700_05/lib/DBIx/Class/Relationship/ManyToMany.pm#L63
Let me know if this answered your question, or there is stuff that I missed.
Cheers
_______________________________________________
List: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/dbix-class
IRC: irc.perl.org#dbix-class
SVN: http://dev.catalyst.perl.org/repos/bast/DBIx-Class/
Searchable Archive: http://www.grokbase.com/group/dbix-class@lists.scsys.co.uk