jak dostat první řádek z related(..)

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

Ahoj,

latt vypadá takto:

    <h2 class="fotografieH2">Vytvořené galerie</h2>
    {foreach $galleries as $gallery}
    <div class="gallery_section">

        <h3><a href="{link UkazGalerii:}">{$gallery->name}</a></h3>
        <a n:href="UkazGalerii:"><img src="{$basePath}/js/colorbox/content/-------<<<<<" alt="fotos"></a>

        <div class="content">{$gallery->related('gallery_pictures')->count('*')} obrázků</div>
        <div class="created">{$gallery->add|date:'j.n.Y'}</div>
<?php
var_dump($gallery->related('gallery_pictures')->name);
?>
    </div>
    {/foreach}

mám dvě tabulky, galerie a obrázky

vypisuji galerii a potřebuju dostat první obrázek co do ní patří z tabulky obrázek abych ho zobrazil na profilu. Jak na to?

tam v tom phpku můžete vidět můj pokus, ale to vypíše jenom název tabulky, nic víc.

Tady jště ty dvě tabule pro lepší orientaci:

DROP TABLE IF EXISTS `galleries`;
CREATE TABLE `galleries` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(60) NOT NULL,
  `id_author` int(11) NOT NULL,
  `add` datetime NOT NULL,
  PRIMARY KEY (`id`),
  KEY `id_author` (`id_author`),
  CONSTRAINT `galleries_ibfk_1` FOREIGN KEY (`id_author`) REFERENCES `users` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


DROP TABLE IF EXISTS `gallery_pictures`;
CREATE TABLE `gallery_pictures` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(100) NOT NULL,
  `id_author` int(11) NOT NULL,
  `id_gallery` int(11) NOT NULL,
  `add` datetime NOT NULL,
  PRIMARY KEY (`id`),
  KEY `id_author` (`id_author`),
  KEY `id_gallery` (`id_gallery`),
  CONSTRAINT `gallery_pictures_ibfk_2` FOREIGN KEY (`id_gallery`) REFERENCES `galleries` (`id`),
  CONSTRAINT `gallery_pictures_ibfk_1` FOREIGN KEY (`id_author`) REFERENCES `users` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Díky

Oli
Člen | 1215
+
0
-

Related vrací GroupeSelection, proto ještě musíš zavolat bud ->fetch() za tim related nebo to dat do foreache (pokud chces tech radku vic)…

qteck
Člen | 164
+
0
-

Okay, vyřešil jsem to:

var_dump($gallery->related('gallery_pictures')->fetch()->name);

:-)

qteck
Člen | 164
+
0
-

ou, Oli, thx :-)))

enumag
Člen | 2118
+
0
-

Pokud potřebuješ opravdu pouze ten první řádek, je vhodné přidat ještě ->limit(1) aby databáze po nalezení prvního řádku nehledala další.

qteck
Člen | 164
+
0
-

okay, extra thanx for enumag :))

qteck
Člen | 164
+
0
-

zdá se že to pokládá stejné dotazy:
{$gallery->related(‚gallery_pictures‘)->fetch()->name}
{$gallery->related(‚gallery_pictures‘)->limit(1)->fetch()->name}

greeny
Člen | 405
+
0
-

Pokud opravdu použiješ jeden řádek, tak se do cache uloží, žes potřeboval jeden řádek a přidá se LIMIT 1.

ViPEr*CZ*
Člen | 818
+
0
-

A ještě jedna zrada… a to, že pokud by neexistoval ten řádek (respektive related k danému záznamu by nenašlo odpovídající záznamy), pak $gallery->related(‚gallery_pictures‘)->fetch() nebude vždy vracet ActiveRow. Čili volání ->name by nemuselo za jistých předpokladů pokaždé projít.