G'Day,
我正在使用DBIx :: Class 0.07003和DBIx :: Class :: Schema :: Loader 0.03009,我正在尝试更改Loader生成的类的基类 - 来自:
package S2S::DBIxperiment::Productions;
# Created by DBIx::Class::Schema::Loader v0.03009 @ 2011-06-24 14:29:13
use base 'DBIx::Class';
__PACKAGE__->load_components("PK::Auto", "Core");
类似于:
package S2S::DBIxperiment::Productions;
# Created by DBIx::Class::Schema::Loader v0.03009 @ 2011-06-24 14:29:13
use base 'BaseMooseDBI';
__PACKAGE__->load_components("PK::Auto", "Core");
BaseMooseDBI的样子:
package BaseMooseDBI;
use Moose;
use base qw(DBIx::Class);
但是,这似乎根本不起作用,它似乎没有继承BaseMooseDBI
包中的内容(属性等)我尝试覆盖load_components
中的BaseMooseDBI
同样,但它永远不会被调用 - 而是它找不到load_components
的错误?
似乎有什么问题?
注意:生成结果类时,我无法使用较新的use_moose
和result_base_class
。
答案 0 :(得分:1)
如果您只想向父类添加一些方法等,您的代码应该可以正常工作。您可能需要use MooseX::NonMoose
,过去我已经使用了父子类DBIx::Class::Core
而不是DBIx::Class
。以下是我成功使用的内容:
# Parent
package App::Schema::Result;
use Moose;
use MooseX::NonMoose;
use namespace::autoclean;
extends 'DBIx::Class::Core';
sub parent_method { ... }
# Child
package App::Schema::Result::Product;
use Moose;
use MooseX::NonMoose;
use namespace::autoclean;
extends 'Keystone::Schema::Site::Result';
__PACKAGE__->table('products');
sub child_method {
my ($self) = @_;
$self->parent_method();
}
如果您希望父类定义DBIx::Class
具体信息(即致电__PACKAGE->table
,__PACKAGE__->add_columns
等),请查看DBIx::Class::Helper::Row::SubClass
。使用它,您可以像普通DBIx::Class::Result::*
一样定义父类,在子类中使用SubClass
组件并调用subclass
:
# Parent
package App::Schema::Result::Parent;
use Moose;
use MooseX::NonMoose;
extends 'DBIx::Class';
__PACKAGE__->load_components(qw{InflateColumn::DateTime Core});
__PACKAGE__->table('products');
...
# Child
package App::Schema::Result::Child;
use Moose;
use MooseX::NonMoose;
extends 'App::Schema::Result::Parent';
__PACKAGE__->load_components(qw{Helper::Row::SubClass Core});
__PACKAGE__->subclass;
# Now add the child specific stuff / override parent stuff
我不确定您是否可以Loader
自动生成部分代码。