【发布时间】:2014-09-01 14:19:54
【问题描述】:
我正在使用DBIx::Class,我有两个架构:
use utf8;
package MyApp::Schema::Result::Person;
use Moose;
use MooseX::NonMoose;
use MooseX::MarkAsMethods autoclean => 1;
extends 'DBIx::Class::Core';
__PACKAGE__->table("person");
__PACKAGE__->add_columns(
"id",
{ data_type => "integer", is_auto_increment => 1, is_nullable => 0 },
);
__PACKAGE__->has_many(
"addresses",
"MyApp::Schema::Result::Address",
{ "foreign.person_id" => "self.id" },
{ cascade_copy => 0, cascade_delete => 0 },
);
1;
还有:
use utf8;
package MyApp::Schema::Result::Address;
use Moose;
use MooseX::NonMoose;
use MooseX::MarkAsMethods autoclean => 1;
extends 'DBIx::Class::Core';
__PACKAGE__->table("address");
__PACKAGE__->add_columns(
"id",
{ data_type => "integer", is_auto_increment => 1, is_nullable => 0 },
"person_id",
{ data_type => "integer", is_foreign_key => 1, is_nullable => 1 },
);
__PACKAGE__->belongs_to(
"person",
"MyApp::Schema::Result::Person",
{ id => "person_id" },
{
is_deferrable => 0,
join_type => "LEFT",
on_delete => "NO ACTION",
on_update => "NO ACTION",
},
);
1;
我想要做的是用一个人对象一次添加多个地址。我就是这样做的:
my $person = $c->model('DB::Person')->new_result({});
$person->addresses([
{
id => 1,
person_id => 1,
},
{
id => 2,
person_id => 1,
},
]);
$person->insert;
我从article 遵循了这种格式,但它似乎不起作用。仅插入人员行,但不插入与其关联的地址。我还尝试在插入之前将addresses 设置为MyApp::Schema::Result::Address 对象的arrayref,但这也不起作用。有谁知道我做错了什么?我没有收到任何错误,只是没有插入地址。在文章中,他们使用 create 而不是 insert。是不是因为这个?如果是这样,有没有办法使用insert 或update 来做到这一点?
【问题讨论】:
标签: perl catalyst dbix-class