Ztrácení dat referencované tabulky smazaného/upraveného záznamu

Werkov
Člen | 17
+
0
-

Řeším problém v aplikaci, který se mi podařilo oholit na tento minimální nefungující příklad.

/** @var Nette\Database\Table\Selection $table */
$table = ...;
$submit = $table->find(20331)->fetch(); // načteme existující záznam

$taskPre = $submit->ref(DbNames::TAB_TASK, 'task_id'); // získáme odkazovaný řádek

$submit->delete(); // (A) smažem
$submit->task_id = 1971; // (B) přenastavíme, jde o platné ID jiného řádku než původního

$taskPost = $submit->ref(DbNames::TAB_TASK, 'task_id'); // znovu chceme odkazovaný řádek

Očekávám v $taskPost objekt řádku dle nově přiřazeného ID, ale dostávám NULL. Pokud zakomentuji řádek (A) nebo (B), tak očekávaný záznam dostanu.

Je tohle feature nebo bug? Lze nějak docílit požadovaného chování? Mám verzi Nette 2.0.12 a PHP 5.4.9.

Díky.


Zjednodušené DB schéma.

CREATE TABLE `submit` (
  `submit_id` int(11) NOT NULL AUTO_INCREMENT,
  `task_id` int(11) NOT NULL COMMENT 'Task',
  PRIMARY KEY (`submit_id`),
  KEY `task_id` (`task_id`),
  CONSTRAINT `submit_ibfk_2` FOREIGN KEY (`task_id`) REFERENCES `task` (`task_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE `task` (
  `task_id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) DEFAULT NULL COMMENT 'Jmeno ulohy',
  PRIMARY KEY (`task_id`),
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Semik
Člen | 135
+
0
-

Mám takový pocit, že je to feature a nelze takto měnit hodnotu ActiveRow. Řádek jsi předtím smazal tak to prostě nejde. Asi bude i správné pro jiné ID vytáhnout z DB aktuální data.

Editoval Semik (8. 10. 2013 22:34)

RSS tématu Téma zavřeno