1

別のテーブルに関連するテーブルがあります。lastInsertIdを使用して各テーブルで個別の保存を実行するのではなく、1つのステートメントでテーブル1の自動インクリメントIDをテーブル2の外部キーとして使用することは可能ですか?アドバイスをいただければ幸いです。ありがとう。

4

1 に答える 1

1

私が理解していることから、あなたには2つのクラスがあります。それらを、ClassAとClassBと呼びましょう。ここで、ClassAはClassBと関係がありますか?のように

class ClassA extends Doctrine_Record
{
  public function setTableDefinition()
  {
    $this->hasColumn('id', 'integer', 4, array('type' => 'integer', 'autoincrement' => true, 'primary' => true, 'length' => 4);
    $this->hasColumn('classBId', 'integer', 4, array('type' => 'integer', 'length' => 4);
  }

  public function setUp()
  {
    $this->hasOne('ClassB as classB', array('local' => 'classBId', 'foreign' => 'id',  'onDelete' => 'CASCADE', 'onUpdate' => 'CASCADE'));
  }
}

class ClassB extends Doctrine_Record
{
  public function setTableDefinition()
  {
    $this->hasColumn('id', 'integer', 4, array('type' => 'integer', 'autoincrement' => true, 'primary' => true, 'length' => 4);
  }

  public function setUp()
  {
    $this->hasMany('ClassA as classAs', array('local' => 'id', 'foreign' => 'classBId'));
  }
}

あなたがこのようなことをしていると仮定します:

$classAInstance = new ClassA;
$classBInstance = new ClassB;

$classAInstance->classB = $classBInstance;

$classB->save();
$classA->save();

これは必然的に2つの別々のINSERTクエリに変換されるため、1つのSQLクエリで両方の挿入を行うことはできません。ただし、lastInsertIdをいじくり回す必要はありません。$ classA-> classBIdを直接設定する代わりに、関連するプロパティを設定することで、DoctrineはIDを追跡します。

于 2009-11-08T13:41:56.740 に答える