构造DBIx :: Class对象和相关对象,但稍后保存

时间:2012-10-07 21:13:07

标签: perl orm dbix-class

我想构造一个DBIx :: Class对象及其相关对象,但是推迟保存对象,稍后在对象上调用insert方法,此时一切都保存完毕。

以下是基于DBIx :: Class文档(艺术家,cd等)中的示例的示例代码。

use MyApp::Schema;
use Data::Dumper ;

sub make_artist_from_some_other_object
{
  my ($object, $schema) = @_ ; 

  my $artist = $schema->resultset('Artist')->new({});
  $artist->name($object->firstname() . ' ' . $object->lastname()) ;

  $artist->new_related('cds', {'title' => $object->firsttitle(), 
                               'year'  => $object->firstyear()}) ;
  $artist->new_related('cds', {'title' => $object->secondtitle(), 
                               'year'  => $object->secondyear()}) ;
  $artist->new_related('cds', {'title' => $object->thirdtitle(), 
                               'year'  => $object->thirdyear()}) ;
  return $artist ;
}

my $schema = MyApp::Schema->connect('dbi:SQLite:dbname=/tmp/abcd.sqlite');
$artist = make_artist_from_some_other_object($some_object, $schema) ;
$artist->insert() ;
# The insert does _not_ save cd information.

我意识到有这方面的方法,例如,保持相关的对象,然后单独保存它们,但我正在寻找的是一个内置的DBIx :: Class方式事先做所有的对象构建然后做稍后一次插入。这可能吗?

1 个答案:

答案 0 :(得分:1)

目前无法做到这一点。 您只能使用new_result创建单独的对象,稍后使用insert插入它们。 通常,主键由数据库分配,因此在此之前它们不可用。 您可以尝试填充关系缓存以实现您想要的效果。 你没有立即插入所有行的原因是什么?