Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Transactions Yii与关系的交易_Transactions_Foreign Keys_Yii - Fatal编程技术网

Transactions Yii与关系的交易

Transactions Yii与关系的交易,transactions,foreign-keys,yii,Transactions,Foreign Keys,Yii,我有一个应用程序,它有两个表“album”和“photo”,其中photo有一个album.id的外键。我使用事务将数据存储在数据库中 保存照片时出现问题。它在以下情况下失败: $photo->albumId = Album::model()->findByAttributes('albumOtherId')->id; 因为数据库中没有唱片集的记录,findByAttributes返回NULL 在事务内部有什么方法可以做到这一点吗?所以我要做的是检查Album::model

我有一个应用程序,它有两个表“album”和“photo”,其中photo有一个album.id的外键。我使用事务将数据存储在数据库中

保存照片时出现问题。它在以下情况下失败:

$photo->albumId = Album::model()->findByAttributes('albumOtherId')->id; 
因为数据库中没有唱片集的记录,findByAttributes返回NULL


在事务内部有什么方法可以做到这一点吗?

所以我要做的是检查Album::model()->FindByatAttributes('albumOtherId')->id==NULL


如果是,则创建一个新相册或要求用户创建相册。由于这种关系,您必须创建相册,如果不创建,它将永远不会保存,因为这取决于它们是否是相册。

因此,我要做的是检查album::model()->FindByatAttributes('albumOtherId')->id==NULL


如果是,则创建一个新相册或要求用户创建相册。由于这种关系,你必须创建相册,如果你不创建,它将永远不会保存,因为这取决于它们是否是相册。

我知道这是一个老问题,但今天我发现自己正在寻找同一问题的答案。我无法相信解决这个问题的唯一方法是先创建“foreing key”,而不使用事务。我不知道OP是否有相同的情况,但对于我的事务,我只需要执行回滚的功能,因为我正在删除和更新其他表,但我不需要外键检查(仅针对该事务)。因此,在第一次查询之前,我添加了以下内容(MySQL):


这使我可以毫无问题地使用rollback()和commit()。希望我能帮上忙。

我知道这是一个老问题,但今天我发现自己在为同样的问题寻找答案。我无法相信解决这个问题的唯一方法是先创建“foreing key”,而不使用事务。我不知道OP是否有相同的情况,但对于我的事务,我只需要执行回滚的功能,因为我正在删除和更新其他表,但我不需要外键检查(仅针对该事务)。因此,在第一次查询之前,我添加了以下内容(MySQL):


这使我可以毫无问题地使用rollback()和commit()。希望我能帮忙。

您能提供交易记录和所有其他代码吗?很难从这一行看出可能发生了什么。非常感谢。您能提供交易记录和所有其他代码吗?很难从这一行看出可能发生了什么。非常感谢。
$transaction = $connection->beginTransaction();
$sqlForeingKeyDisable = 'SET foreign_key_checks = 0;';
$command = $connection->createCommand($sqlForeingKeyDisable);
$command->execute();