我如何在事务Yii 1*中保存模型id


How can I get saved model id in transaction Yii 1*?

我尝试在事务中获取保存模型中的id,如

$transaction = Yii::app()->db->beginTransaction();
try
{
    $someModel = new SomeModel(); // extends CActiveRecord
    $someModel->someProperty = '123';
    $someModel->save();
    $childModel = new ChildModel();
    $childModel->parent_id = $someModel->id; // this id is empty =(
    $childModel->save();
    // ... more some logic ... //
}
catch ('Exception $e)
{
    $transaction->rollback();
}
$transaction->commit();

为什么我不能在事务中获得增量id ?

1)如果你的model中有beforeSave,那么确保returns是其父的beforeSave:

return parent::beforeSave();

2)尝试保存ChildModel只有当Parent ModelSaved

    $someModel = new SomeModel(); // extends CActiveRecord
        $someModel->someProperty = '123';
        if($someModel->save()){
        $childModel = new ChildModel();
        $childModel->parent_id =  $someModel->getPrimaryKey();
        $childModel->save();
}

由于一些错误,第一个模型无法保存,但您没有验证它,因此第二个模型没有未保存模型的id。请使用以下格式:

if ($someModel->save()) {
    $this->saveChildModel($someModel->id);
}

您还需要确保someModel在数据库中具有有效的主键配置