2

次のような機能が必要です。

$parent->get_grandchildren_by_category({category => 'foo'});

単純な連鎖結合を使用して、親クラスの外部で簡単に実行できます。

$schema->resultset('Parent')->search(
    {
        'me.id' => 62,
        'grandchildren.category' => 'foo'
    },
    {
        join => {'children' => 'grandchildren'}
    }
);

しかし、親クラス内では、スキーマオブジェクトにアクセスできません(アクセスすべきではありません)。親クラス内ではアクセスできます$self->childrenが、子の結果セットが返され、それぞれを取得するために子を反復処理する必要がありますgrandchildren

このActiveRecordスタイルを定義する方法はありますか?

class Parent < ActiveRecord::Base
   has_many :children
  has_many :grandchildren, :through => :children
end
4

1 に答える 1

1

さんにたくさん助けてもらいました#dbix-class。ActiveRecord スタイルの関係を明示的に定義する方法はないかもしれませんが:through、結果チェーンのさらに下にある子を取得する方法はあります。

ResultSetsearch_relatedメソッドを使用すると、リレーションシップを通じて到達し、子のアクセサーを使用できます。たとえば、私の親クラスでは次のようになります。

sub get_grandchildren_by_category{
    my ($self, $category) = @_;
    my @gchildren = $self->children->search_related('grandchildren'
        {
             'grandchildren.category' => $category
        }
    );

    return \@gchildren;
}

search_related結果セットを返すので、これらのsearch_related呼び出しを必要なだけ連鎖させることができると思います。

于 2009-03-13T20:17:46.883 に答える