Výběr z tabulky na základě více cizích klíčů na stejnou tabulku
- Polki
- Člen | 553
Mám tabulku Knihy a tabulku Uživatele. V tabulce Uživatele uchovávám id, Jméno a Příjmení. V tabulce Knihy uchovávám id, název_knihy, vypůjčil_si, propůjčuje.
Tedy mám několik uživatelů, každý může dát k vypůjčení libovolné množství svých knih a také si může půjčit libovolné množství knih od jiných uživatelů. V tabulce Knihy jsou sloupce vypůjčil_si a propůjčuje cizí klíče na položku id v tabulce Uživatele.
Dotaz zní: Jak vybrat všechny knihy, které si daný uživatel vypůjčil a jak vybrat všechny knihy, které daný uživatel propůjčuje? Tedy jak zajistit, aby Nette vědělo, podle kterého z cizích klíčů do tabulky Uživatele má vybírat?
Díky za odpovědi. :)
- Polki
- Člen | 553
Abych pravdu řekl tak ne. Studoval jsem tuhle stránku "":https://doc.nette.org/…ase/explorer
Tam je nějaký návod, jak to provézt, jenže z tohoto zápisu:
$selection = $context->table(‚book‘);
$selection->where(‚author.name LIKE ?‘, ‚%Jon%‘);
$selection->where(‚translator.name‘, ‚David Grudl‘);
Nejsem moc moudrý, jelikož podle toho, jak jsem to pochopil, tak author.name je odkaz na tabulku author ne? nebo je to sloupec author a v něm je celý řádek o autorovi z tabulky authors? Nebo jak tomu mám rozumět? Pokud je to odkaz na řádek o autorovi, neměl bych to potom vybrat stylem $context->table(‚Knihy‘)->where(‚propůjčuje.id‘, $userId); ? podle toho, co jsi mi poradil chápu jen, že je v tom daném sloupci uložena hodnota primárního klíče, na který se odkazuji. Nejspíš ty InnoDB moc nechápu. Nicméně děkuji za tip a jdu jej zkusit.
- David Matějka
- Moderator | 6445
A cetl is i ten odstavec nad tim?
Řekněme, že chceme vybrat všechny knihy, které napsal autor jménem „Jon“. Musíme napsat pouze jméno „spojovacího klíče“ relace a název sloupce spojené tabulky. „Spojovací klíč“ je odvozen od jména sloupce, který odkazuje na tabulku, se kterou se chceme spojit. V našem příkladu (viz databázové schéma) je to sloupec author_id, ze kterého stačí použít část – author. name je název sloupce v tabulce author. Můžeme vytvořit podmínku také pro překladatele knihy, který je připojen sloupcem translator_id.