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
Ř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;