gpt4 book ai didi

perl - 更改 DBIx 类结果类的继承树?

转载 作者:行者123 更新时间:2023-12-01 05:39:35 26 4
gpt4 key购买 nike

节日,

我正在使用 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_componentsBaseMooseDBI也一样,但它永远不会被调用 - 相反它会出错,它无法找到 load_components ?

似乎是什么问题?

注意:我不能使用较新的 use_mooseresult_base_class生成结果类时。

编辑:找到解决方案。看到了 DBIx::Class::Schema::Loader 现在是如何做到的,有 Mutable 和 Immutable 结果类。

最佳答案

如果您只想向父类添加一些方法等,您的代码应该可以工作。您可能需要 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自动生成其中一些代码。

关于perl - 更改 DBIx 类结果类的继承树?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6464068/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com