我有一个与另一个相关的表。是否可以在一个语句中使用表一的自动递增 ID 作为表二的外键,而不是使用 lastInsertId 并在每个表上执行单独的保存?任何建议表示赞赏。谢谢。
问问题
876 次
1 回答
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。
于 2009-11-08T13:41:56.740 回答