DBIx::Class::Row::set_columns 能施展多少魔法?
How much magic can DBIx::Class::Row::set_columns do?
DBIx::Class::Row::set_columns 是否足够聪明来更新预取的子行?
我试过了,好像不行。我可能期待太多魔法。
我做了这样的事情:
my $data = {
id => 1,
date => '2015-06-27',
# etc.
invoice_lines => [{
id => 101,
# etc.
]},
};
my $rs = $schema->resultset('Invoice')->search(
{ 'me.id' => $id },
{ prefetch => 'invoice_lines' },
)->first;
$rs->set_columns($data);
得到了这样的东西:
SELECT me.id, me.date, ..., invoice_lines.id, ... FROM invoices me LEFT
JOIN invoice_lines invoice_lines ON invoice_lines.invoice_id = me.id WHERE ( me.id = ? ) ORDER BY me.id: '1'
Mojo::Reactor::EV: Read failed: DBIx::Class::Row::get_column(): No such column 'invoice_lines' on MyProg::DB::Schema::Result::Invoice at /home
/chris/stuff/Invoices.pm line 289
它认为'invoice_lines'只是另一列,而不是关系。插入数据库或从数据库读取时,关系正常工作,所以我没有包括所有血淋淋的细节。
虽然计划中,但此功能不是核心功能。
目前有实现此功能的 DBIx::Class::ResultSet::RecursiveUpdate 模块。
DBIx::Class::Row::set_columns 是否足够聪明来更新预取的子行?
我试过了,好像不行。我可能期待太多魔法。
我做了这样的事情:
my $data = {
id => 1,
date => '2015-06-27',
# etc.
invoice_lines => [{
id => 101,
# etc.
]},
};
my $rs = $schema->resultset('Invoice')->search(
{ 'me.id' => $id },
{ prefetch => 'invoice_lines' },
)->first;
$rs->set_columns($data);
得到了这样的东西:
SELECT me.id, me.date, ..., invoice_lines.id, ... FROM invoices me LEFT
JOIN invoice_lines invoice_lines ON invoice_lines.invoice_id = me.id WHERE ( me.id = ? ) ORDER BY me.id: '1'
Mojo::Reactor::EV: Read failed: DBIx::Class::Row::get_column(): No such column 'invoice_lines' on MyProg::DB::Schema::Result::Invoice at /home
/chris/stuff/Invoices.pm line 289
它认为'invoice_lines'只是另一列,而不是关系。插入数据库或从数据库读取时,关系正常工作,所以我没有包括所有血淋淋的细节。
虽然计划中,但此功能不是核心功能。 目前有实现此功能的 DBIx::Class::ResultSet::RecursiveUpdate 模块。