Yii AR事务:auto increment id返回null

时间:2013-10-13 13:22:11

标签: php activerecord yii transactions auto-increment

在我的Yii应用程序中我有这个关系(Product有很多属性),Product表主键是自动增量,属性表有外键product_id到相关产品。 当我在yii中使用事务来保存父(Product)和子(Attribute)时我得到错误(product_id不能为空),这是因为($ product-> id)在事务中保存后返回NULL。 这是我的代码:

        $transaction = Yii::app()->db->beginTransaction();
    try {
        $product = new Product;
        $product->name = 'name_product';

        if ($product->save()) {
            $product_attribut = new ProductAtt;
            $product_attribut->product_id = $product->id;
            $product_attribut->name = 'att_name';
            $product_attribut->value = 22;
            if (!$product_attribut->save()) {
                throw new Exception('fail');
            }
        } else {
            throw new Exception('fail');
        }

        $transaction->commit();
        echo 'success';
    } catch (Exception $e) {
        $transaction->rollback();
        echo $e->getMessage();
    }

有任何想法在交易中保存这种关系请...谢谢。

1 个答案:

答案 0 :(得分:1)

为了防止其他人遇到这个问题,我找到了迄今为​​止在我读过的所有类似问题中都没有提到的解决方案:

确保为数据库分配了主键。即使您有自动增量字段,也不一定意味着您已经定义了主键。 Yii读取数据库模式并使用此信息来确定有哪些主键,以及随后如何在插入后更新记录中的主键。因此,即使您的 ActiveRecord定义定义了主键,这还不够。

Yii :: app() - > db-> getLastInsertID()实际上可以在这种情况下工作,但是如果这在多会话环境中有效,我是一个可疑的。如果你还没有,那么定义一个主键显然是更好的解决方案。

希望这有助于其他人!