2013-02-22 68 views
3

我想使用DBIx :: Class为SQLite3启用外键支持,以便在更新和删除时使用级联。我在文档中找到了这个http://search.cpan.org/dist/DBIx-Class/lib/DBIx/Class/Storage/DBI/SQLite.pm,但是如何使用它却不是很清楚。DBIx :: Class如何为SQLite启用PRAGMA foreign_keys?

这就是我在我的脚本中设置Schema.pm和连接字符串的方法。

# Schema.pm 
package MyApp::Schema; 
use base qw/DBIx::Class::Schema/; 

use strict; 
use warnings; 
our $VERSION = '0.00001'; 

__PACKAGE__->load_namespaces(); 
__PACKAGE__->load_components(qw/Schema::Versioned/); 
__PACKAGE__->upgrade_directory('sql/'); 

# connection string in script 
use MyApp::Schema; 
my $schema = MyApp::Schema->connect('dbi:SQLite:db/myapp.db'); 

感谢,

+0

你目前如何指定DSN /用户名/密码?你可以显示该代码或配置文件的一部分?请随意将实际的dsn,用户和密码更改为“DSN”,“用户”,“密码”。 – ikegami 2013-02-22 01:01:11

+0

我刚将这些信息添加到描述中。感谢您及时的回复。 – quicoju 2013-02-22 02:24:53

回答

5

两个

my $schema = MyApp::Schema->connect(
    'dbi:SQLite:db/myapp.db', 
    undef, 
    undef, 
    { 
     on_connect_do => 'PRAGMA foreign_keys = ON', 
    } 
); 

my $schema = MyApp::Schema->connect(
    dsn   => 'dbi:SQLite:db/myapp.db', 
    on_connect_do => 'PRAGMA foreign_keys = ON', 
); 

应该做的伎俩。


正如评论指出的那样,你也可以使用的

on_connect_call => 'use_foreign_keys', 

代替

on_connect_do => 'PRAGMA foreign_keys = ON', 
+0

太棒了,这个例子完全向我展示了如何让它工作,而不是使用on_connect_do,我不得不使用on_connect_call =>'use_foreign_keys'谢谢! – quicoju 2013-02-22 02:47:58

+0

这是因为它假设是'PRAGMA foreign_keys = ON'。固定。 – ikegami 2013-03-17 00:47:57

相关问题