PHP - Doctrine保存到多个表

时间:2009-11-08 07:13:28

标签: php doctrine

我有一张与另一张相关的表格。是否可以在一个语句中使用表一的自动递增Id作为表二的外键,而不是使用lastInsertId并在每个表上执行单独的保存? 任何建议表示赞赏 感谢。

1 个答案:

答案 0 :(得分:1)

根据我的理解,你有两个类,让我们称它们为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();

因为这必须转换为两个单独的INSERT查询,所以不可能在单个SQL查询中执行这两个插入。但是,没有必要使用lastInsertId,通过设置相关属性而不是直接设置$ classA-> classBId,Doctrine将跟踪id。