2016-04-30 14 views
0

У меня проблема с DBIx :: Class :: Schema, я создал db, а затем таблицы: User, Post, .... Тогда я сделал это в терминалеperl DBIx :: Class :: Schema

dbicdump -o dump_directory=./lib App::Schema 'dbi:mysql:my_db:localhost:3306' root password 

Команда из LIB :: App :: схемы с Schema.pm и пути Result в нем. (С табличными классами).

Это был сгенерирован Schema.pm

use utf8; 
package App::Schema; 
use strict; 
use warnings; 
use base 'DBIx::Class::Schema'; 

__PACKAGE__->load_namespaces; 
1; 

И я использую схему так:

use lib::App::Schema; 
my $schema = App::Schema->connect("dbi:mysql:dbname=my_db", "root", "password"); 
my @m = $schema->resultset('User')->all; 

В этом файле ошибка ПОЛУЧИТЬ

DBIx::Class::Schema::source(): Can't find source for User at lib/Local/ThisFile.pm line 26 
+0

ли эти имена пакетов, что вы действительно используете? Ваша схема называется «Habr :: Schema», и вы пытаетесь загрузить 'lib :: App :: Schema'. 'Lib' не является частью имени модуля. Это каталог _library_, о котором должна знать ваша среда, например. используя 'use lib 'lib';' в верхней части вашей основной программы. – simbabque

ответ

0

Давайте предположим, что вы хотите создайте пакет Habr::Schema для схемы вашей базы данных. Вы должны использовать команду

dbicdump -o dump_directory=./lib Habr::Schema 'dbi:mysql:my_db:localhost:3306' root password 

и после этого вы можете получить доступ к этому модулю с помощью этого

use lib './lib'; 
use Habr::Schema; 

хотя вы должны быть осторожны с относительными путями в use lib и всегда лучше использовать абсолютный путь так, чтобы вы можете запустить свой код из любого рабочего каталога

Ваша полная программа может выглядеть так. Он печатает id столбец из каждой строки в таблице User

use strict; 
use warnings 'all'; 
use feature 'say'; 

use Habr::Schema; 

my $schema = App::Schema->connect(qw/ dbi:mysql:dbname=my_db root password /); 

for my $user ($schema->resultset('User')->all) { 
    say $user->id; 
} 
+0

Прошу прощения, когда я вставляю этот код, я изменил имя своего приложения и забыл в пакете. Так что это не ошибка, это мое невнимание. –

+0

@MiKa: Ваша проблема решена? – Borodin

+0

нет, мой код был в порядке, я забыл только здесь. –