0

DBIx::Class オブジェクトとその関連オブジェクトを構築したいのですが、オブジェクトの保存を延期insertし、後でオブジェクトのメソッドを呼び出し、その時点ですべてを一度に保存します。

以下は、DBIx::Class ドキュメント (artist、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 の方法であり、事前にすべてのオブジェクトの構築を行い、その後単一の挿入を行います。今度いつか。これは可能ですか?

4

1 に答える 1

1

現在、それを行う方法はありません。new_result個別のオブジェクトを作成するには、insert を使用して後で挿入することしかできません。多くの場合、主キーはデータベースによって割り当てられるため、それ以前は使用できません。リレーションシップ キャッシュにデータを入力して、目的を達成することができます。すべての行をすぐに挿入しない理由は何ですか?

于 2012-10-08T06:04:30.440 に答える