DBIx::Class 如何启用 SQLite 的 PRAGMA foreign_keys?

3
我希望使用DBIx::Class启用SQLite3的外键支持,以便在更新和删除时使用级联操作。我在文档中找到了这个链接http://search.cpan.org/dist/DBIx-Class/lib/DBIx/Class/Storage/DBI/SQLite.pm,但它没有清楚地说明如何使用。
这是我在脚本中设置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');

谢谢。


你目前是如何指定你的dsn/user/pass的?可以展示一下相关代码或者配置文件的部分吗?如果需要,你可以将实际的dsn、user和password更改为“DSN”、“USER”和“PASSWORD”。 - ikegami
我刚刚将信息添加到描述中。感谢您的快速回复。 - quicoju
1个回答

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',

太棒了,这个例子完全向我展示了如何让它工作,只是我不得不使用on_connect_call => 'use_foreign_keys'而不是on_connect_do。谢谢! - quicoju
这是因为应该是 PRAGMA foreign_keys = ON。已修复。 - ikegami

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接