2013-02-22 3 views
3

Я хочу включить поддержку внешних ключей SQLite3 с помощью DBIx :: Class, чтобы использовать каскад при обновлении и удалении. Я нашел это http://search.cpan.org/dist/DBIx-Class/lib/DBIx/Class/Storage/DBI/SQLite.pm в документации, но не очень ясно, как его использовать.DBIx :: Class Как включить PRAGMA foreign_keys для SQLite?

Вот как я устанавливаю 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», «USER», «PASSWORD». – ikegami

+0

Я просто добавил информацию к описанию. Спасибо за быстрый ответ. – quicoju

ответ

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' THANKS! – quicoju

+0

Это потому, что это должно быть 'PRAGMA foreign_keys = ON'. Исправлена. – ikegami