DBIx::ClassでJOINを使用するには二つ目のハッシュにjoin要素を入れるんだが、ここにセットする名前ではまった。
My::Schema->resultset("Hoge")->search(
{ "hoga.poop" => $poop },
{
join => "hoga"
}
);
ってやってると、No such relationship...とか言われちゃう。色々と中身を見て最終的に
DBIx::Class::ResultSource->relationship_info($relation);
がundef返してる。さらに確かめるためにrelationshipの中身を見る:
use Data::Dumper;
print STDERR (My::Schema->resultset("Hoge")->result_source->_relationships), "\n";
で見ると、JOIN対象のテーブル名が"hoga"なのにたいして、ここで指定する名前はhogasと複数形になってる。ということで解決策:
My::Schema->resultset("Hoge")->search(
{ "hogas.poop" => $poop },
{
join => "hogas"
}
);
いやー、1時間くらいはまった。