3

問題

私は、データベースに多対多の関係を作成し、DBIx::Classいくつかの行を挿入する最小限の例を作成しようとしています。

私のデータベースには、テーブルACによってリンクされている2つのテーブルACがあります。次のスクリプトを使用して値を挿入しようとしています。

#! /usr/bin/perl
use strict;
use warnings;
use DB::Main;

my $s = DB::Main->connect("dbi:SQLite:example.db");
my $a1 = $s->resultset('A')->create({a_value => 'a1'});
my $a2 = $s->resultset('A')->create({a_value => 'a2'});
my $a3 = $s->resultset('A')->create({a_value => 'a3'});

$s->resultset('C')->create({c_value => 'c1'});
$s->resultset('C')->create({c_value => 'c2'});

my $c1 = $s->resultset('C')->find(1);
$c1->add_to_as($a1);

値a1からa3およびc1、c2は問題なく作成されます。a1とc1の関係をテーブルACに追加しようとすると。次のエラーメッセージが表示されます。

Can't use an undefined value as a HASH reference at /Library/Perl/5.12/DBIx/Class/Relationship/ManyToMany.pm line 88.

私は手紙にadd_to_$relのドキュメンテーションに従っていると思います。私はここで何が間違っているのですか?

スキーマ定義

DBIx::Class::DeploymentHandlerSQLiteデータベースにデプロイする次のデータベーススキーマを使用しています。

ファイルdb/Main.pm

package DB::Main;
use base qw/DBIx::Class::Schema/;

our $VERSION = 1;
__PACKAGE__->load_namespaces;
1;

ファイルdb/Main/Result/A.pm

package DB::Main::Result::A;
use base qw/DBIx::Class::Core/;
__PACKAGE__->table('a');
__PACKAGE__->add_columns(
  a_id => {
    data_type => 'Integer',
    size      => 8
  },
  a_value => {
    data_type => 'Varchar',
    size      => 50
  },
);
__PACKAGE__->set_primary_key('a_id');
__PACKAGE__->has_many('acs' => 'DB::Main::Result::AC', 'f_a_id');
__PACKAGE__->many_to_many('cs' => 'DB::Main::Result::C', 'acs');
1;

ファイルdb/Main/Result/C.pm

package DB::Main::Result::C;
use base qw/DBIx::Class::Core/;
__PACKAGE__->table('c');
__PACKAGE__->add_columns(
  c_id => {
    data_type => 'Integer',
    size      => 8
  },
  c_value => {
    data_type => 'Varchar',
    size      => 50
  },
);
__PACKAGE__->set_primary_key('c_id');
__PACKAGE__->has_many('acs' => 'DB::Main::Result::AC', 'f_c_id');
__PACKAGE__->many_to_many('as' => 'DB::Main::Result::A', 'acs');
1;

ファイルdb/Main/Result/AC.pm

package DB::Main::Result::AC;
use base qw/DBIx::Class::Core/;
__PACKAGE__->table('ac');
__PACKAGE__->add_columns(
  f_a_id => {
    data_type => 'Integer',
    size      => 8
  },
  f_c_id => {
    data_type => 'Integer',
    size      => 8
  },
);
__PACKAGE__->set_primary_key('f_a_id', 'f_c_id');
__PACKAGE__->belongs_to('a' => 'DB::Main::Result::A', 'f_a_id');
__PACKAGE__->belongs_to('c' => 'DB::Main::Result::C', 'f_c_id');
1;
4

1 に答える 1

3

many_to_manyへの呼び出しの引数が間違っています。many_to_manyのドキュメントを参照して、次のことを試してください。

__PACKAGE__->many_to_many('cs' => 'acs', 'c');
__PACKAGE__->many_to_many('as' => 'acs', 'a');
于 2013-01-09T20:03:13.173 に答える