2016-04-30 40 views
0

我有一個DBIx :: Class :: Schema的問題,我創建了數據庫,然後創建了表格:User,Post,...。然後我在終端執行了這個操作perl DBIx :: Class :: Schema

​​

命令製作了lib :: App :: Schema與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

你真正使用的是什麼那些包的名字呢?你的Schema被稱爲'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

不,我的代碼是好的,我只在這裏忘了。 –

相關問題