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', });