Nette\Database – Smazání řádku v M:N tabulce
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- Seith
- Člen | 24
Skvělé, netušil jsem, že selection má také metodu delete. K tomu příkladu dump DB:
CREATE TABLE `table1` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(255) COLLATE utf8_czech_ci NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `name` (`name`),
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_czech_ci;
CREATE TABLE `table2` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(255) COLLATE utf8_czech_ci NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `name` (`name`),
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_czech_ci;
CREATE TABLE `table1_table2` (
`table1_id` int(10) unsigned NOT NULL,
`table2_id` int(10) unsigned NOT NULL,
PRIMARY KEY (`table1_id`,`table2_id`),
KEY `table2_id` (`table2_id`),
CONSTRAINT `table1_table2_ibfk_1` FOREIGN KEY (`table1_id`) REFERENCES `table1` (`id`),
CONSTRAINT `table1_table2_ibfk_2` FOREIGN KEY (`table2_id`) REFERENCES `table2` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_czech_ci;
- vvoody
- Člen | 910
Skusil som to a nevybehla ziadna chyba.
INSERT INTO `table1` (`id`, `name`) VALUES (1, 'abc');
INSERT INTO `table1_table2` (`table1_id`, `table2_id`) VALUES (1, 1);
INSERT INTO `table2` (`id`, `name`) VALUES (1, 'xyz');
dump($this->connection->table('table1')->where('name','abc')->fetch()->related('table1_table2')->delete());
- Tomáš Jablonický
- Člen | 115
Ve vazební tabulce chybí podle mě primární ID … nejsem si jist ale možná podle toho \Nette\Database maže záznamy.
- Tomáš Jablonický
- Člen | 115
Seith napsal(a):
Primáční klíč tam je, na dvou sloupcích. Nette\Database s ním pouze neumí pracovat.
Ano, je tam dvojce sekundárních klíčů (unikátní dvojce) a je to zároveň primární klíč. Nette\Database nejspíš opravdu pracovat. Mám pocit, že opravdu maže záznamy podle ID v tabulce bez rozdílu jestli je to vazemní tabulka nebo tabulka (prostě vazební tabulku nerozpozná i když by mohlo podle tabulka1_tabulka2 ale to by asi byla zbytečná režije).