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

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
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
Backer | 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)