代码之家  ›  专栏  ›  技术社区  ›  wes

我可以在DBIx::Class中建立“父母通过孩子拥有许多孙子孙女”的关系吗?

  •  2
  • wes  · 技术社区  · 17 年前

    $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
    
    1 回复  |  直到 17 年前
        1
  •  1
  •   wes    17 年前

    我得到了很多帮助 #dbix-class :through

    ResultSet s search_related 方法,您可以通过关系进行访问并使用孩子的访问器。例如,在我的家长课堂上:

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

    自从 search_related 返回一个结果集,我想你可以把它们链接起来 搜索相关 你想打多远就打多远。