Pohled (view) a reference přes cizí klíč

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Maxell92
Člen | 38
+
0
-

Ahoj,
mám v DB tabulku s výpisem projektů, pro jednoduchost cca:

CREATE TABLE `projects` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `clients_id` int(11) NOT NULL,
  `name` varchar(255) COLLATE utf8_czech_ci NOT NULL,
  PRIMARY KEY (`id`),
  KEY `clients_id` (`clients_id`),
  CONSTRAINT `projects_ibfk_1` FOREIGN KEY (`clients_id`) REFERENCES `clients` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_czech_ci;

Dále mám tabulky příjmů a nákladů a vytvořený pohled, který mi udělá výsledný balance (vynechána logika subdotazů, pro demostraci není potřeba):

CREATE VIEW projects_view AS SELECT projects.id AS id,projects.clients_id AS clients_id FROM projects

Problém je, že v okamžiku, kdy vyberu data z pohledu, nefunguje mi reference přes cizí klíč clients_id, tzn. {$item->clients->name}

Na pohledu cizí klíč vytvořit nejde, jak se tedy k té referenci dostanu?

Díky

David Matějka
Moderator | 6445
+
+2
-

Discovered reflection pohledy nezvlada. Resenim je bud pouzit conventional reflection

nette:
	database:
		dsn: ...
		...
		reflection: conventional

Pak ale musis dodrzovat presny pravidla pri pojmenovavani. Dalsi alternativou je napsat si vlastni reflection, coz uz ale muze byt komplikovanejsi.

Maxell92
Člen | 38
+
0
-

S conventional to funguje, díky.
Je někde sepsáno, co je u conventional potřeba dodržovat? Teď se zdá, že funguje celá aplikace, ale rád bych si o tom něco přečetl a nikde jsem nic nenašel.

David Matějka
Moderator | 6445
+
0
-

Nevim, jestli je to v doc, ale muzes kouknout do kodu, v podstate jde o to, aby primarni klic byl vzdy „id“ a nazev sloupecku s FK „nazev_cilove_tabulky_id“

Zax
Člen | 370
+
0
-

Pravidla pro ConventionalReflection snad dostatečně vysvětlí řádek 37 v API dokumentaci ;-)

Maxell92
Člen | 38
+
0
-

Ok, díky, to používám stejně :)

pitr82
Člen | 121
+
0
-

Zrovna teď jsem řešil podobný problém s dotazem :
SELECT MAX(counted) FROM
(SELECT COUNT(*) AS counted, auto_id FROM rezervace GROUP BY auto_id )
as counts;

můžete mi objasnit, jestli je nějaké omezení v reflection: conventional oproti discovered ? Všiml jsem si, že ConvetionalReflection nepoužívá Nette\Caching\Cache.
id a nazevTabulky_id používám v celém schématu MySql.

Mysteria
Člen | 797
+
0
-

@pitr82: Jedinou „nevýhodou“ bude to, že musíš dodržovat to konvenční pojmenování. Osobně convetional používám v jednom větším projektu a naprosto bez problémů.