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;