Více cizích klíčů mířících do stejné tabulky
- onny
- Člen | 67
Zdravím, mám problém se základní použítám Nette Database, konkrétně zápisu
$article->user->name;
zde je vše v pořádku, ale v tabulce article mám třeba created_by a edited_by a oboje je cizí klíč mířící na tabulku uživatelů, Database si vždy vezme toho prvního. V původním NotORM je funkce via() která toto řeší, ale nenašel jsem alternativní zápis pro Nette, poradí někdo?
Editoval onny (11. 2. 2014 21:04)
- MartinitCZ
- Člen | 580
@**onny**: Tebou hledanou odpověd najdeš zde =>. https://doc.nette.org/cs/database
- Je to úplně dole.
Editoval martinit (11. 2. 2014 21:09)
- onny
- Člen | 67
martinit napsal(a):
@**onny**: Tebou hledanou odpověd najdeš zde =>. https://doc.nette.org/cs/database
- Je to úplně dole.
Díky, předpokládám že jsi myslel to ref, zajímalo mě, jeslti se k tomu nedá nějak dostat třeba přes něco jako
$article->edited_by->name
- David Matějka
- Moderator | 6445
me spis prekvapuje, ze funguje
$article->user->name;
nebo tam mas nejakej sloupecek user_id?
nette\database totiz pokud nenajde ten sloupecek, tak se koukne, jestli neexistuje sloupecek s cizim klicem, ktery obsahuje ten retezec. v tvem pripade by tedy melo fungovat
$article->edited->name;
$article->created->name;
- onny
- Člen | 67
matej21 napsal(a):
me spis prekvapuje, ze funguje
$article->user->name;
nebo tam mas nejakej sloupecek user_id?
nette\database totiz pokud nenajde ten sloupecek, tak se koukne, jestli neexistuje sloupecek s cizim klicem, ktery obsahuje ten retezec. v tvem pripade by tedy melo fungovat
$article->edited->name; $article->created->name;
Jasně, mám tam ten sloupeček. Jen nechápu, co bylo myšleno tím druhým, pokud v db mám sloupec edited_by a zkusím co jsi poslal, tak hlásí PDO že tabulka edited neexistuje, což bych očekával, ale nevím, co jsi tím chtěl říci nebo naznačit.
Editoval onny (11. 2. 2014 21:18)
- David Matějka
- Moderator | 6445
pouzivas discovered reflection? (pokud nevis, co to je, tak jo :) )
mas spravne FK?
co jsem tim myslel: kdyz das $article->edited
, tak
nette\database zjisti, ze tam zadny takovy sloupecek neni, ale zjisti, ze je tam
sloupecek edited_by (ktery obsahuje slovo edited) a ktery odkazuje na tabulku
user pomoci nejakyho FK
- onny
- Člen | 67
matej21 napsal(a):
pouzivas discovered reflection? (pokud nevis, co to je, tak jo :) )
mas spravne FK?co jsem tim myslel: kdyz das
$article->edited
, tak nette\database zjisti, ze tam zadny takovy sloupecek neni, ale zjisti, ze je tam sloupecek edited_by (ktery obsahuje slovo edited) a ktery odkazuje na tabulku user pomoci nejakyho FK
Klíče bych řekl že mám správně – edited_by a created_by míří na user.id. Jestli se to má tak chovat, tak mě asi nechová nebo nevím :).
PS: na discovered reflection sis odpověděl v závorce :)
- David Matějka
- Moderator | 6445
verze nette? (i kdyz myslim, ze zrovna na tohle by to vliv mit nemelo)
ukaz jak vypada ta tabulka article (vcetne FK) – treba dumpni strukturu do sql
Editoval matej21 (11. 2. 2014 21:32)
- onny
- Člen | 67
matej21 napsal(a):
verze nette? (i kdyz myslim, ze zrovna na tohle by to vliv mit nemelo)
ukaz jak vypada ta tabulka article (vcetne FK) – treba dumpni strukturu do sql
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET NAMES utf8 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
-- Exportování struktury pro tabulka article
CREATE TABLE IF NOT EXISTS `article` (
`id` int(8) NOT NULL AUTO_INCREMENT,
`title` varchar(256) COLLATE utf8_czech_ci NOT NULL,
`edited_by` int(8) NOT NULL DEFAULT '0',
`created_by` int(8) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`),
KEY `FK_article_user` (`edited_by`),
KEY `FK_article_user_2` (`created_by`),
CONSTRAINT `FK_article_user` FOREIGN KEY (`edited_by`) REFERENCES `user` (`id`),
CONSTRAINT `FK_article_user_2` FOREIGN KEY (`created_by`) REFERENCES `user` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 COLLATE=utf8_czech_ci;
/*!40000 ALTER TABLE `article` DISABLE KEYS */;
INSERT INTO `article` (`id`, `title`, `edited_by`, `created_by`) VALUES
(2, 'Článek', 1, 2);
/*!40000 ALTER TABLE `article` ENABLE KEYS */;
/*!40101 SET SQL_MODE=IFNULL(@OLD_SQL_MODE, '') */;
/*!40014 SET FOREIGN_KEY_CHECKS=IF(@OLD_FOREIGN_KEY_CHECKS IS NULL, 1, @OLD_FOREIGN_KEY_CHECKS) */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;