我有一个应用程序女巫有两个表'专辑'和'照片',其中照片有一个foreign_key到album.id。我使用事务将数据存储在数据库中。
保存照片时出现问题。它失败了:
$photo->albumId = Album::model()->findByAttributes('albumOtherId')->id;
因为数据库中没有相册记录,并且findByAttributes返回NULL。
在交易中有没有办法做到这一点?
答案 0 :(得分:1)
我知道这是一个古老的问题,但我今天发现自己在寻找同样问题的答案。我无法相信解决这个问题的唯一方法是首先创建“foreing key”而不使用事务。我不知道OP是否有相同的情况,但对于我的事务,我只需要能够进行回滚,因为我正在删除和更新其他表,但我不需要外键检查(仅限于此交易)。因此,在第一次查询之前,我添加了以下内容(MySQL):
$transaction = $connection->beginTransaction();
$sqlForeingKeyDisable = 'SET foreign_key_checks = 0;';
$command = $connection->createCommand($sqlForeingKeyDisable);
$command->execute();
这使我可以毫无问题地使用rollback()和commit()。希望我能提供帮助。
答案 1 :(得分:0)
所以我要做的是检查Album :: model() - > findByAttributes('albumOtherId') - > id === NULL
然后如果是,则创建新专辑或要求用户创建专辑。您必须根据关系创建相册,否则,它将永远不会保存,因为它取决于它们是一张专辑。