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。可能没有办法显式定义:throughActiveRecord 样式的关系,但有一种方法可以在结果链的下游进一步抓取子项。

使用ResultSet's search_related方法,您可以通过关系访问并使用孩子的访问器。例如,在我的 Parent 类中:

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 回答