DBICでinnerとかleftとかrightとかのjoinをする

わかりづれえ。

UserがBooksをhas_manyで、BookがUserにbelongs_toなとき、つまりUser has_many Bookで、Book belongs_to Userなとき、bookからselectかけたらただのjoin、つまりinner joinになる。
そりゃ当然だ。親が確実にいるからこそ子供は居る。
で、userからselectかけたときはleft joinになる。
大抵はそれでいいんだけど、極まれにinner joinとかright joinしたいってことが起こる。
そんなときは下記。

package MyApp::Schema::User;

__PACKAGE__->resultset_attributes({
    alias => 'user',
    from  => [{user => 'users'}],
    ### for inner join book
    #from  => [
    #            { user => 'users', },
    #            [
    #                { book => 'books', -join_type => 'inner'},
    #                { 'user.id' => 'book.user_id' },
    #            ],
    #         ],
    cache => 1,
    where => {'user.deleted' => 0},
    prefetch => [qw/user book/],
    ### for inner join book
    #prefetch => [qw/user/],
    order_by => 'user.id DESC',
});