【问题标题】:Construct DBIx::Class object and related objects but save later构造 DBIx::Class 对象和相关对象但稍后保存
【发布时间】:2012-09-28 04:23:48
【问题描述】:

我想构造一个 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 方法来预先构建所有对象,然后再做稍后再插入一次。这可能吗?

【问题讨论】:

    标签: perl orm dbix-class


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-30
      • 2013-05-02
      • 1970-01-01
      • 1970-01-01
      • 2020-09-03
      • 2015-02-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多