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

如何在类::dbi中使用add_to?

  •  3
  • Julien  · 技术社区  · 16 年前

    我正在尝试将Class::DBI与简单的单亲关系结合使用--May chidren relationships:

    Data::Company->table('Companies');
    Data::Company->columns(All => qw/CompanyId Name Url/);
    Data::Company->has_many(offers => 'Data::Offer'=>'CompanyId'); # =>'CompanyId'
    

    Data::Offer->table('Offers');
    Data::Offer->columns(All => qw/OfferId CompanyId MonthlyPrice/);
    Data::Offer->has_a(company => 'Data::Company'=>'CompanyId');
    

    我尝试添加新记录:

    my $company = Data::Company->insert({ Name => 'Test', Url => 'http://url' });
    my $offer = $company->add_to_offers({  MonthlyPrice => 100 });
    

    但我得到:

    Can't locate object method "add_to_offers" via package "Data::Company"
    

    我看了古典音乐:CD的例子,但我不知道我做错了什么。

    3 回复  |  直到 16 年前
        1
  •  4
  •   Adam Bellaire    16 年前

    我同意曼尼的观点,如果您的包声明在同一个文件中,那么您需要使用 has_a() 先定义关系。否则,如果它们在不同的源文件中,则文档将说明:

    类::dbi通常应该能够 做正确的事,只要一切 类继承类::dbi之前 “使用”任何其他类。

    关于三个论点的形式,你做得很好。第三个参数 has_many() 是外部类中的列,它是该类的外键。也就是说, Offer 有一个 CompanyId 哪些指向 Company 同伴 .

        2
  •  2
  •   Julien    16 年前

    谢谢你

    嗯,问题其实不是我的代码,而是我的设置。今天早上我打开电脑电源后意识到: *服务器上的apache+mod_perl *SMB挂架

    当我对几个文件进行更改时,并不是所有的更改都是由mod_perl加载的。重启Apache解决了这个问题。我在过去看到过这样的问题,客户机和SMB服务器的时间不同步。

    上面的代码对于每个模块都有一个文件可以正常工作。

    谢谢你

        3
  •  1
  •   innaM    16 年前

    我真的没有太多的课堂经验:DBI,但我还是要试一试:

    1. 这个 documentation 声明:“具有has_a()的类必须在具有has_many()的类之前定义。”
    2. 我找不到任何关于你使用的方式的参考,在你的案例中,有三个论点总是“公司ID”。