Cascading deletion fix

This commit is contained in:
2021-08-31 20:25:26 +02:00
parent c977235188
commit 18de25873b
4 changed files with 12 additions and 25 deletions

View File

@@ -209,7 +209,7 @@ class Db extends PhpObject
if($this->isId($sColumnName) && $sColumnName!=self::getId($sTableName))
{
$asForeignKeyQueries[] = "ALTER TABLE ".$sTableName." ADD INDEX(`".$sColumnName."`)";
$asForeignKeyQueries[] = "ALTER TABLE ".$sTableName." ADD FOREIGN KEY (`".$sColumnName."`) REFERENCES ".self::getTable($sColumnName)."(`".$sColumnName."`)";
$asForeignKeyQueries[] = "ALTER TABLE ".$sTableName." ADD FOREIGN KEY (`".$sColumnName."`) REFERENCES ".$this->getTable($sColumnName)."(`".$sColumnName."`)";
}
}
}
@@ -496,24 +496,14 @@ class Db extends PhpObject
$bSuccess = true;
//linked tables
switch($sTableName)
{
case (array_key_exists('cascading_delete', $this->asOptions) && array_key_exists($sTableName, $this->asOptions['cascading_delete'])) :
$asTables = array_merge(is_array($sTableName)?array_values($sTableName):array($sTableName), array_values($this->asOptions['cascading_delete'][$sTableName]));
break;
case is_string($sTableName) :
$asTables = array($sTableName);
break;
case is_array($sTableName):
$asTables = $sTableName;
break;
default:
$asTables = array();
}
foreach($asTables as $sTable)
{
$bSuccess = $bSuccess && $this->setQuery("DELETE FROM ".$sTable." WHERE ".$this->getId($sTableName)." = ".$iTableId);
if(array_key_exists('cascading_delete', $this->asOptions) && array_key_exists($sTableName, $this->asOptions['cascading_delete'])) {
foreach($this->asOptions['cascading_delete'][$sTableName] as $sTable) {
$bSuccess = $bSuccess && $this->deleteRow($sTable, $iTableId);
}
}
$bSuccess = $bSuccess && $this->setQuery("DELETE FROM ".$sTableName." WHERE ".$this->getId($sTableName)." = ".$iTableId);
return $bSuccess;
}