Nette\Database – chybná invalidace cache sloupců

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Filip Procházka
Moderator | 4668
+
0
-

Nette\Database špatně invaliduje cache, párkrát přistoupím k některým sloupcům a pak mi vyhazuje

throw new \PDOException("No reference found for \${$table}->{$key}.");

z DiscoveryReflection, že jiné sloupce nezná.

$db = $this->context->database;

foreach ($db->table('gallery') as $gallery) {
	dump(array('gallery' => $gallery->name));

	foreach ($gallery->related('gallery_image') as $img) {
		dump(array('desc' => $img->description));
		// dump(array('book' => $img->in_book));
	}
}
CREATE TABLE `gallery` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB;

CREATE TABLE `gallery_image` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `gallery_id` int(11) NOT NULL,
  `in_book` tinyint(4) NOT NULL DEFAULT '0',
  `description` text NOT NULL,
  PRIMARY KEY (`id`),
  KEY `gallery_id` (`gallery_id`),
  CONSTRAINT `gallery_image_ibfk_1` FOREIGN KEY (`gallery_id`) REFERENCES `gallery` (`id`)
) ENGINE=InnoDB;

INSERT INTO `gallery` (`id`, `name`) VALUES (1, 'Plavky'), (3, 'Zima'), (5, 'Jen tak');

INSERT INTO `gallery_image` (`id`, `gallery_id`, `in_book`, `description`) VALUES
(21,	1,	1,	'plavky'),
(33,	3,	1,	'sit'),
(34,	5,	0,	'amet'),
(35,	5,	0,	'kontesq'),
(36,	5,	0,	'blabla'),
(37,	5,	0,	'jedna'),
(38,	5,	0,	'dva'),
(39,	5,	0,	'tri'),
(40,	3,	0,	'finish');

Párkrát to spustím, uloží se cache, pak odkomentuju řádek a vyskočí chyba.

Editoval HosipLan (16. 3. 2012 17:12)

hrach
Člen | 1834
+
0
-

Uhuh, to je bug report jak brno, na zavření! Takze, doufam, ze se jedna o nightly, ale by tu mela byt ladenka, dany kod, ktery to volal, atp.

Filip Procházka
Moderator | 4668
+
0
-

Doplněno.

hrach
Člen | 1834
+
0
-

Verze nette? Toto uz jsem resil :) mozna nebyl fix uplny

Jo jeste na jake chybe to pada-tedy jaka je error message?

Editoval hrach (16. 3. 2012 13:01)

Filip Procházka
Moderator | 4668
+
0
-

da24b6f PDOException No reference found for $gallery_image->is_book.

Editoval HosipLan (16. 3. 2012 11:28)

Aearsis
Člen | 57
+
0
-

Nechci ti do toho kecat, ale v tabulce sloupec is_book vazne neni, je tam jen in_book… Nebo je to nejaka ocekavana magie?

Filip Procházka
Moderator | 4668
+
0
-

To jsem se jenom upsal, ale díky za upozornění.

Přidám tedy ještě i laděnku. http://www.kdyby.org/…ception.html

Editoval HosipLan (16. 3. 2012 17:18)

Aearsis
Člen | 57
+
0
-

Dobrý, já viděl že je to tam dvakrát, tak jestli to náhodou nebylo tím…

hrach
Člen | 1834
+
0
-

Pracuji na tom. Neni tu vunec jednoduche. Tvuj usecase mam sice uz opraveny ale pri psani testu jsem objevil diru zase jinde

hrach
Člen | 1834
+
0
-

Mělo by byt fixed. Prosim otestuj:
https://github.com/…tte/pull/603