Perl DBIx::Class::Storage::DBI';s连接信息工作?
委员会: 连接信息 这个方法通常由DBIx::Class::Schema中的“connection”调用, 它在传递之前将其参数列表封装在arrayref中 他们在这里 参数列表可能包含:Perl DBIx::Class::Storage::DBI';s连接信息工作?,perl,dbix-class,Perl,Dbix Class,委员会: 连接信息 这个方法通常由DBIx::Class::Schema中的“connection”调用, 它在传递之前将其参数列表封装在arrayref中 他们在这里 参数列表可能包含: 通常会将相同的4元素参数集传递给“connect” 在DBI中,可选地后跟由 DBIx::类: $connect_info_args = [ $dsn, $user, $password, \%dbi_attributes?, \%extra_attributes? ]; $connect_info_ar
- 通常会将相同的4元素参数集传递给“connect”
在DBI中,可选地后跟由
DBIx::类:
$connect_info_args = [ $dsn, $user, $password, \%dbi_attributes?, \%extra_attributes? ];
$connect_info_args = [ sub { DBI->connect (...) }, \%extra_attributes? ];
- 返回
连接的DBI数据库句柄(可选后跟额外属性)
由DBIx::Class识别:
$connect_info_args = [ $dsn, $user, $password, \%dbi_attributes?, \%extra_attributes? ];
$connect_info_args = [ sub { DBI->connect (...) }, \%extra_attributes? ];
- 包含所有属性和dsn/user/password的单个hashref
混合在一起:
这尤其有用 对于基于Catalyst的应用程序,允许以下配置 (配置::常规样式):$connect_info_args = [{ dsn => $dsn, user => $user, password => $pass, %dbi_attributes, %extra_attributes, }]; $connect_info_args = [{ dbh_maker => sub { DBI->connect (...) }, %dbi_attributes, %extra_attributes, }];
schema_类应用程序::DB dsn dbi:mysql:database=test 用户测试用户 密码测试通行证 自动提交1
/dsn
/用户
组合可由密码
键替代 其值是返回连接的DBI数据库句柄的coderefdbh\u生成器
自动提交到0或1。DBIx::Class进一步建议
设置为1,您可以通过中的“txn_do”执行事务
DBIx::Class::Schema方法。如果不这样做,则DBIx::Class会将其设置为1
请明确地将其设置为零。这是大多数DBD的默认设置。看见
“DBIx::Class和AutoCommit”了解详细信息
这是什么?它是内部调用的方法,还是全局调用的方法?如果它是一个内部调用的方法,为什么要发送一个dbh生成器或四个参数?什么决定了它发送的内容?它被列为一种方法。什么是$connect\u info\u args
?下面是我如何让它工作的
模式类
您必须使用这样做的存储(您可以在文档中找到)
存储类
我找到了一个粗略的例子来说明如何做。谈论那些糟糕的文件
connect\u info
似乎已断开。事情都试过了。
- 使用自定义
connect\u info
对存储进行子类化。它被调用,但它返回的任何内容都没有任何用处。调用->connect->storage->确保连接架构上的代码>将导致错误
- 使用Moose::around()包装
connect_info
。无法包装在继承层次结构中找不到方法“connect\u info”
- 从
BUILD
调用$self->connect_info()
<代码>DBIx::Class::Storage::DBI::connect_info
会被调用,但无论我向它提交了什么,sub都只会得到$self,这是第一个参数
\uuuuuuuuuuuuuuuuuu->connect\u info({})
或\uuuuuuuuuuuuuuuuuuuu->connect\u info([{}])
导致这两个参数都被发送到DBIx::Class::Storage::DBI::connect_info
,但是缺少$self
会导致Class::XSAccessor:无效的实例方法invocant:当sub尝试写入访问器时,
没有提供哈希引用如果您要转储整个文档部分,请至少将其格式化以便可读?如果你从一个模式类继承,并且想要影响连接的建立方式,那么这个链接就很重要了。这可能是为了调试purposses,或者注入测试数据库,或者类似的东西。它还很有趣,因为它返回了连接信息,这对于测试、调试、分析和奇怪的生产案例同样有用。我不会将此作为回答,因为我太累了,无法详细阐述。如果您只使用DBIC,则不需要处理此问题。当然,这是一个方法还是一个参数?$connect\u info\u参数是我得到的还是我返回的?这个方法得到了什么?它有两个签名吗?你可以说它有两个签名,是的。但是Perl没有这个概念。所有Moose访问器都是getter和setter,但是setter可以接受至少两个不同的参数集,并且知道在这种情况下该怎么做。请说明您正在尝试执行的操作,或者您只是在阅读文档时感到困惑,希望有人对此进行解释。
connect\u info
不起作用。这就是为什么在任何地方都没有这样的例子。第二个错误是“contact\u info”,而应该是“connect\u info”。
package DBIx::Class::Storage::DBI::mysql::MySubClass;
use mro 'c3';
use base 'DBIx::Class::Storage::DBI::mysql';
sub connect_info {
my $self = shift;
my $retval = $self->next::method([{
username => _username(),
password => $password,
dsn => "my:dsn:"
})
$retval;
};