výběr dat z více tabulek mysql

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

Ahoj,

nemůžu přijít na to, co mám špatně:

        $inzeraty = $this->database->table('inzeraty');
        foreach ($inzeraty as $inzerat) {
            echo $inzerat->jmeno . " inzeruje:";
            foreach ($inzerat->related('kniha') as $book) {
                $book->nazev;

Laděnka mi hlásí:

Nette\Database\Reflection\MissingReferenceException

No reference found for $inzeraty->related(kniha).

Vždyť mán vytvořený cizí klíč v tabulce inzerty na sloupci knija, který směřuje na id knihy.

Prosím, poraďte mi někdo, kde mám chybu. Díky moc.

Editoval ppar (27. 3. 2015 15:16)

smaley
Člen | 6
+
-3
-

Čo sa týka tvojej chyby tak mam pocit ze tie úvodzovky niesu správne

$inzeraty = $this->database->table("inzeraty");
foreach ($inzeraty as $inzerat) {
echo $inzerat->jmeno . " inzeruje:";
foreach ($inzerat->related("kniha") as $book) {
$book->nazev;

skús takto

Druhá vec skús si naštudovať JOIN MYSQL

Petr Parolek
Člen | 458
+
0
-

použít JOIN? Podle mě potom jsou zbytečné a k ničemu cizí klíče!

David Matějka
Moderator | 6445
+
0
-

„related“ je pro „has many“ vazbu – tedy napriklad ze kategorie ma clanky. V tvem pripade, jestli tomu dobre rozumim, mas v tabulce „inzeraty“ FK s ID knihy? pak pouzij ref (jestli tomu nerozumim, tak posli dump tabulky, at je to jasne)

btw, precti si, jak formatovat kod, at to priste nemusim opravovat za tebe ;)

Petr Parolek
Člen | 458
+
0
-
CREATE TABLE IF NOT EXISTS `inzeraty` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `jmeno` varchar(100) NOT NULL,
  `email` varchar(100) NOT NULL,
  `kniha` int(11) NOT NULL,
  `cena` int(4) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `inzeraty_ibfk_1` (`kniha`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=8 ;

INSERT INTO `inzeraty` (`id`, `jmeno`, `email`, `kniha`, `cena`) VALUES
(1, 'Petr', 'petr@example.com', 1, 250),
(2, 'Petr', '5uf3pb0ndmiztdd@my10minutemail.com', 1, 10),
(3, 'Petr', '5uf3pb0ndmiztdd@my10minutemail.com', 1, 10),
(4, 'Petr', '5uf3pb0ndmiztdd@my10minutemail.com', 1, 10),
(5, 'Petr', '5uf3pb0ndmiztdd@my10minutemail.com', 1, 10),
(6, 'Petr', '5uf3pb0ndmiztdd@my10minutemail.com', 1, 10),
(7, '123', 'toto není mail', 4, 0);

CREATE TABLE IF NOT EXISTS `knihy` (
  `id` int(10) NOT NULL AUTO_INCREMENT,
  `autor` varchar(100) NOT NULL,
  `nazev` varchar(100) NOT NULL,
  `vydavatelstvi` varchar(100) NOT NULL,
  `rok` int(4) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=6 ;

INSERT INTO `knihy` (`id`, `autor`, `nazev`, `vydavatelstvi`, `rok`) VALUES
(1, 'Callum Hopkins', 'PHP Okamžitě', 'Computer press', 2014),
(2, 'Marian Böhmer', 'Návrhové vzory v PHP', 'Computer press', 2012),
(3, 'Jakub Vrána', '1001 tipů a triků pro PHP', 'Computer press', 2011),
(4, 'Jonathan Chaffer, Karl Swedberg', 'Mistrovství v jQuery', 'Computer press', 2013),
(5, 'Martin Mikuľák', 'Programování WWW stránek pro úplné začátečníky', 'Computer press', 2011);

ALTER TABLE `inzeraty`
  ADD CONSTRAINT `inzeraty_ibfk_1` FOREIGN KEY (`kniha`) REFERENCES `knihy` (`id`);
--\

Mám podezření, že jsem špatně vytvořil cizí klíče....

Editoval ppar (27. 3. 2015 16:49)