2015-06-27 28 views
0

难道是DBIx::Class::Row::set_columns足够聪明来更新预取的子行吗?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' 只是另一列,而不是关系。插入数据库或从数据库读取时,这些关系正常工作,所以我没有包含所有的血腥细节。

回答