gpt4 book ai didi

perl - 将带有 add_to_$rel 的对象插入到与 DBIx::Class 的多对多关系中

转载 作者:行者123 更新时间:2023-12-01 05:46:22 27 4
gpt4 key购买 nike

问题

我正在尝试构建一个最小的示例,其中我创建了一个多对多关系 DBIx::Class并将一些行插入数据库。

在我的数据库中,我有两个表AC,它们由表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.

我想我正在关注 Documentation add_to_$rel 的字母。我在这里做错了什么?

模式定义

我正在使用以下数据库架构,我使用 DBIx::Class::DeploymentHandler 部署了它到 SQLite 数据库中。

文件 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;

最佳答案

您对 many_to_many 的调用中的参数是错误的。查阅 many_to_many 的文档并尝试以下操作:

__PACKAGE__->many_to_many('cs' => 'acs', 'c');
__PACKAGE__->many_to_many('as' => 'acs', 'a');

关于perl - 将带有 add_to_$rel 的对象插入到与 DBIx::Class 的多对多关系中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14233917/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com