DBICでLEFT JOIN
from アトリビュートを使用する。
http://search.cpan.org/~ash/DBIx-Class-0.08008/lib/DBIx/Class/ResultSet.pm#from
belongs_to を使用してリレーションしていると
普通の join (INNER JOIN) となる。
場合によって、left join を使用しなければならない時、
以下のように from アトリビュートを使用する。
my $it = $schema->resultset('Goods')->search(
{
'stock.quantity' => {is => undef},
},
{
columns => [qw/goods_id/],
from => [
{ me => 'goods' }, #ここで goods テーブルを指定するのがポイント
[
{ stock => 'stock', -join_type => 'left' },
{ 'stock.goods' => 'me.goods_id' }
],
],
}
);
これで
SELECT me.goods_id FROM goods me LEFT JOIN stock stock ON ( stock.goods = me.goods_id ) WHERE ( stock.quantity IS NULL );
となる。
どんなSQLが発行されているかは DBIC_TRACE をオンにすると見ることが出来る。
$ENV{DBIC_TRACE} = 1;
ex) http://www.rwds.net/wiki?page=DBIx%3A%3AClass%A4%CE%B3%D0%BD%F1