[Dbix-class] Naming columns in nested joins

Jon dbix at bytabok.com
Wed May 24 12:10:57 CEST 2006


Hi,

I'm doing a nested with three tables:

member: (has_many member_books mb)
member_id

member_books (belongs to member, book)
member_id
book_id
relation

book (has many member_books mb)
book_id


My query I'm running is "What (distinct) books does members who wants the
book the current member has have?"


The way I see it this should be correct:
MemberBooks->search(
    {
        'me.relation' => 'has',
        'me.member_id' => $self->member_id
    })->search_related('book')->search_related ('mb',
              {
                  'mb.relation' => 'wants',
                  'mb.member_id' => {'!=', $self->member_id}
              }
    )->search_related ('member')->search_related('mb',
    {
        'mb.relation' => 'has',
    },
    { group_by => ['mb.book_id']}
        );

But it results in:
SELECT mb_2.member_id, mb_2.book_id, mb_2.language, mb_2.shape,
mb_2.relation FROM member_books me  JOIN book book ON ( book.book_id =
me.book_id ) LEFT JOIN member_books mb ON ( mb.book_id = book.book_id )
JOIN member member ON ( member.member_id = mb.member_id ) LEFT JOIN
member_books mb_2 ON ( mb_2.member_id = member.member_id ) WHERE ( ( (
mb.relation = ? ) AND ( ( ( mb.member_id != ? AND mb.relation = ? ) AND (
me.member_id = ? AND me.relation = ? ) ) ) ) ) GROUP BY mb.book_id LIMIT 10:
`has', `1', `wants', `1', `has'

Instead i have to change the last part to be:
->search_related('mb',
    {
        'mb_2.relation' => 'has',
    },
    { group_by => ['mb_2.book_id']}
        );


So my question is, am I doing something wrong here which makes DBIC
interpretate my query wrong, or am I supposed to keep track of the naming?
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.rawmode.org/pipermail/dbix-class/attachments/20060524/465780d3/attachment.htm 


More information about the Dbix-class mailing list