Spojení tabulek s jednou společnou buňkou

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

Zdarvím vespolek. Mám dotaz jak na spojení dvou tabulek. Zatím sem to nikde nepotřeboval, ale te by se mi to hodilo.
Mám v DB dvě tabulky s jednou společnou buňkou „folder“.
V presenteru k tabulkám přistupuju pomocí modelu

model:
public function getGallery() {
        return $this->database->table('mmrs_gallery');
    }

    public function getPhotos() {
        return $this->database->table('mmrs_photos');
    }
presenter:
$this->model->getPhotos()
$this->model->getGallery()

Z první tabulky potřebuju vypsat poslední 4 záznamy o obrázcích (buňka photo)
Z té druhé k ní potřebuju připojit název Galerie (buňka gallery)
Prohledal sem celé fórum několikrát pročetl https://doc.nette.org/cs/database#… Ale stále se mi nedaří.
Zkoušel sem to dát dohromady v presenteru do pole

$lastImage = $this->model->getPhotos()->order('id DESC')->limit(4);
        foreach ($lastImage as $wiew) {
            foreach ($this->model->getGallery()->where('folder', $wiew->folder) as $name) {
                $this->template->wiews_last = array($wiew->photo => $name->name);
            }
        }

Ale dostanu jen jeden záznam. Podobným způsobem sem to zkoušel i v latte, ale opět získám jen jeden záznam. Poradí někdo?

castamir
Člen | 629
+
0
-

v každém průchodu cyklu si přepisuješ hodnotu $this->template->wiews_last. Jestli z toho chceš udělat pole, zkus kód upravit v podobném duchu jako následující kód

$lastImage = $this->model->getPhotos()->order('id DESC')->limit(4);
$result = array();
        foreach ($lastImage as $wiew) {
            foreach ($this->model->getGallery()->where('folder', $wiew->folder) as $name) {
                 $result[] = array($wiew->photo => $name->name);
            }
        }
$this->template->wiews_last = $result;

Nicméně, tohle by se dalo vyřešit už na úrovni databáze a to vhodnout úpravou dotazu

Rellik
Člen | 104
+
0
-

Jo supr díky. Ještě sem tam přidal jednu položku a výsledné pole teď už mám se všemi hodnotami, které potřebuju. Nicméně sem se do toho už celkem zamotal a nejspíš to dělá přepracování, nebo alkohol, ale nemůýu si s tím teď poradit u výpisu…

Array
(
    [0] => Array
        (
            [71b2f4861ee179374deaa04a459a5cdb] => Array
                (
                    [janbeaniii.jpg] => JIná galerie
                )

        )

    [1] => Array
        (
            [71b2f4861ee179374deaa04a459a5cdb] => Array
                (
                    [0801picr.jpg] => Jiná galerie
                )

        )

    [2] => Array
        (
            [71b2f4861ee179374deaa04a459a5cdb] => Array
                (
                    [homer-simpson_003.jpg] => Jiná galerie
                )

        )

    [3] => Array
        (
            [2b4769f23fb0d23f32f04f01aba88da9] => Array
                (
                    [dsc_1557.jpg] => Jiný název galerie
                )

        )

)

Ten dlouhý kód je složka v které je dále v dalším poli prezentován obrázek a název galerie. Z toho potřebuju dostat takový výstup:
Takto ** výrazněné hodnoty jsou ty co dosazuju..

<a href="{link PhotoWiew: gallery=>**Jiný název galerie**}"><img src="/gallery/**2b4769f23fb0d23f32f04f01aba88da9**/nahledy/**dsc_1557.jpg**" alt="**dsc_1557.jpg**"></a>

Už sem takové pole používal, ale za boha si nemůžu vzpomenout jak… Tak kdyby se někomu ještě chtělo poradit, byl bych rád. Pokud ne, tak na to určitě dřív nebo pozděj dojdu i sám…

EDIT:
Vyřešeno…

{foreach $wiews_last as $key => $value}
        {foreach $value as $k => $val}
            {foreach $val as $l => $name}
                <td><a href="{link PhotoWiew: gallery=>$name}"><img src="{$basePath}/gallery/{$k}/nahledy/{$l}" alt="{$l}"></a></td>
            {/foreach}
        {/foreach}
    {/foreach}

Ještě líp pojmenuju proměnné. Hodil sem to sem narychlo aby případně nemusel nikdo přemýšlet.. :)
Díky moc za pomoc… :)

Editoval Rellik (20. 1. 2013 19:38)

Tabetha
Člen | 140
+
0
-
{foreach $wiews_last as $value} // tu by nemalo byť potreba $key :-)
        {foreach $value as $k => $val}
            {foreach $val as $l => $name}
                <td><a href="{link PhotoWiew: gallery=>$name}"><img src="{$basePath}/gallery/{$k}/nahledy/{$l}" alt="{$l}"></a></td>
            {/foreach}
        {/foreach}
    {/foreach}
Rellik
Člen | 104
+
0
-

Jo pravda. To tam zůstalo z předešlých pokusů. Nicméně to nevadilo, že to tam bylo. Díky