Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl DBIx::Class::Storage::DBI';s连接信息工作?_Perl_Dbix Class - Fatal编程技术网

Perl DBIx::Class::Storage::DBI';s连接信息工作?

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

委员会:

连接信息

这个方法通常由DBIx::Class::Schema中的“connection”调用, 它在传递之前将其参数列表封装在arrayref中 他们在这里

参数列表可能包含:

  • 通常会将相同的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 混合在一起:

    $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,
    }];
    
    这尤其有用 对于基于Catalyst的应用程序,允许以下配置 (配置::常规样式):

    
    schema_类应用程序::DB
    dsn dbi:mysql:database=test
    用户测试用户
    密码测试通行证
    自动提交1
    
    dsn
    /
    用户
    /
    密码
    组合可由
    dbh\u生成器
    键替代 其值是返回连接的DBI数据库句柄的coderef

请注意,DBI文档建议您始终显式设置
自动提交到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;
    };