2013-02-22 79 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

相關問題