2016-04-30 15 views
0

私はDBIx :: Class :: Schemaに問題があります。私はdbとテーブルを作成しました:User、Post、...。それから私は、端末perl DBIx :: Class :: Schema

​​

でこれをやっコマンドSchema.pmと、それにつながるパスとLIB ::アプリケーション::スキーマを作りました。 (テーブルクラスで)。

これは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; 

のgetエラー

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

のすべての行からid列を出力しますか?あなたのスキーマは 'Habr :: Schema'と呼ばれ、' lib :: App :: Schema'をロードしようとしています。 'lib'はモジュール名の一部ではありません。あなたの環境が知っておくべき_libraryディレクトリ_です。あなたのメインプログラムの先頭に 'lib 'lib'; 'を置くことによって、 – simbabque

答えて

0

は、あなたがしたいことを前提としていますデータベースのスキーマのパッケージHabr::Schemaを作成します。あなたは、コマンドに

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

を使用することになり、その後、あなたがuse libで相対パスを持つように注意する必要がありますが、この

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

を使用してそのモジュールにアクセスすることができ、そのように絶対パスを使用することが常に優れています任意の作業ディレクトリからコードを実行することができます

あなたのプログラムはすべてこのように見えます。それはあなたが本当に使用しているそれらのパッケージ名があります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

いいえ、私のコードはOKでした、私はここだけ忘れました。 –

関連する問題