在我的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();
}
有任何想法在交易中保存这种关系请...谢谢。
答案 0 :(得分:1)
为了防止其他人遇到这个问题,我找到了迄今为止在我读过的所有类似问题中都没有提到的解决方案:
确保为数据库分配了主键。即使您有自动增量字段,也不一定意味着您已经定义了主键。 Yii读取数据库模式并使用此信息来确定有哪些主键,以及随后如何在插入后更新记录中的主键。因此,即使您的 ActiveRecord定义定义了主键,这还不够。
Yii :: app() - > db-> getLastInsertID()实际上可以在这种情况下工作,但是如果这在多会话环境中有效,我是一个可疑的。如果你还没有,那么定义一个主键显然是更好的解决方案。
希望这有助于其他人!