如何在事务Yii 1 *中获取保存的模型ID?

时间:2016-08-08 14:59:27

标签: php yii

我尝试在事务中保存模型中的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?

2 个答案:

答案 0 :(得分:3)

1)如果beforeSave中有model,请确保returns {}}父母的beforeSave

return parent::beforeSave();

2)仅在ChildModel ParentModel时才尝试保存Saved

    $someModel = new SomeModel(); // extends CActiveRecord
        $someModel->someProperty = '123';
        if($someModel->save()){

        $childModel = new ChildModel();
        $childModel->parent_id =  $someModel->getPrimaryKey();
        $childModel->save();
}

答案 1 :(得分:0)

由于某些错误,第一个模型无法保存,但您无法对其进行验证,因此第二个模型不会出现问题。有没有保存模型的id。请使用以下内容:

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

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