【发布时间】:2012-10-09 13:10:54
【问题描述】:
我正在寻求一些代码建议。我有两个相互依赖的模型。当其中一个模型被删除时,我想确保数据库中的两条记录都被删除。
我使用外键在一个方向上处理这个问题,所以如果父级被删除。但由于这些行都相互依赖,我需要在孩子身上发生相同的功能。
在子模型中,我重载了 delete 方法,所以它看起来像这样:
public function delete() {
$cameraTransaction = $this->dbConnection->beginTransaction();
try
{
$this->ftpuser->delete();
if($this->beforeDelete())
{
$result=$this->deleteByPk($this->getPrimaryKey())>0;
$this->afterDelete();
}
$cameraTransaction->commit();
}
catch(Exception $e) // an exception is raised if a query fails
{
$cameraTransaction->rollBack();
}
}
我已经测试过,这似乎运作良好。我想知道专家/大师是否可以确认我是否做对了:)
谢谢
艾伦
【问题讨论】:
-
我认为在数据库级别执行此操作会更好。您不能(假设您使用 MySQL)在两个表和
ON DELETE CASCADE之间创建关系吗? -
您可以使用“ON DELETE CASCADE”,但在此之前请阅读此链接stackoverflow.com/questions/278392/…
-
对不起,问题应该更清楚。我使用了 DELETE 级联,但这仅适用于父级 -> 子级,而不是删除子级时。
标签: php mysql transactions yii