[% WHILE %] の中のこと その後 (日々のこと)
と、思っていたら、多対多のときには _rs ではできないね。
そうそう。忘れてました。many-to-manyではできないんですね。
これはドキュメントにもちゃんと書いてあって
Many_to_many is not strictly a relationship in its own right. Instead, it is a bridge between two resultsets which provide the same kind of convenience accessors as true relationships provide. Although the accessor will return a resultset or collection of objects just like has_many does, you cannot call $related_resultset and similar methods which operate on true relationships.
つまりhas_manyと同じようにアクセサを使えるけど、$related_resultsetなメソッドは使えないので下の例だとentries_rsなんてメソッドは使えないと。
package MT::Schema::Category;
use strict;
__PACKAGE__->has_many(
placement => 'MT::Schema::Placement',
'placement_category_id',
);
__PACKAGE__->many_to_many(
entries => 'placement',
'entry',
);
1;
ちなみに
$category->search_related('entries', {})
とか*_related関連メソッドも、そんなリレーション知らんと、怒られます。
なので、面倒だけど僕はmany-to-manyな関係を持つテーブルには
sub entries_rs {
my $rs = shift->entries->count
return $rs;
}
なんてメソッドくっつけてます。
またはDBIx::Class::Relationship::ManyToManyをhackして
*{"${class}::${meth}_rs"} = sub {
my $self = shift;
my $rs = $self->${meth}(@_);
return $rs;
};
ってメソッドをつけるのもありかもですね。

こんにちわ、さわです。
ちゃんとドキュメントに書いてあるんですね。
知りませんでした・・・。
さわさま>
どもです。
実はボクも最近まで知りませんでした。あの辺のドキュメントはちょっとわかりにくいですね。