Výpis z tabulky v databázi

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

Dobrý den,
mám jeden stejný kód jako ten druhý, ovšem jeden z nich nefunguje, tedy přesněji řečeno hází chybu pouze v cache, cache jsem promazal, ale tohle nepomohlo po vymazání na mě vyjede stejná chyba. Neví někdo z Vás kde by mohl být problém?

Notice
Undefined variable: klobasy

Kód vypadá takto, má dvě části KlobasyModel.php vypadá takto:

<?php
namespace App\Model;

use Nette,

    Nette\Utils\Strings;

class KlobasyModel extends \Nette\Object {

    private $database;

    public function __construct(Nette\Database\Context $database) {

        $this->database = $database;

    }

    public function findAll() {

        return $this->database->table('klobasy');

    }

    public function findById($id) {

        return $this->findAll()->get($id);

    }

    public function getPageBySlug($slug) {

        return $this->findAll()->where("slug", $slug)->fetch();

    }

    public function insert($values) {

        return $this->findAll()->insert($values);

    }

    public function updated($values) {

        return $this->findAll()->where($id)->update($values);

    }

}

A KlobasyPresenter.php vypadá takto:

<?php
namespace App\FrontModule\Presenters;

use Nette,

    App\Model;

class KlobasyPresenter extends HomepagePresenter {

    protected $page;

    public function actionDefault($slug) {

        $data = $this->page->getPageBySlug($slug);

        $this->template->pages = $data;

    }

}

Který vypisuji takto:

<div class="col-sm-12 col-md-3 seznam-vin">
    <ul>
        <li n:foreach="$klobasy as $v"><a n:href="klobasy:default, $v->img">{$v->nazev}</a></li>
    </ul>
</div>
<div class="col-sx-12 col-sm-12 col-md-9 brands">
    {foreach $klobasy as $v}
        {foreach $c->related('soubory') as $s}
            <div class="col-sm-4"><a n:href="klobasy:default, $v->slug"><img style="height: 150px;" src="{$basePath}/{$s->cesta}" alt="img"></a></div>
        {/foreach}
    {/foreach}
</div>
David Matějka
Moderator | 6445
+
0
-

no vidim, ze do sablony nastavujes pouze „pages“ tak tam nemuzou bejt „klobasy“…
a tohle neni chyba v cache. to je proste neexistujici promenna…

Editoval matej21 (26. 8. 2014 20:10)

Sveet
Člen | 55
+
0
-

matej21 napsal(a):

no vidim, ze do sablony nastavujes pouze „pages“ tak tam nemuzou bejt „klobasy“…
a tohle neni chyba v cache. to je proste neexistujici promenna…

Tohle je stejný kód který ovšem funguje, tak nevím proč kód v prvním příspěvku nefunguje

<?php
namespace App\FrontModule\Presenters;

use Nette,

    App\Model;

class CaruselPresenter extends HomepagePresenter {

    protected $page;

    public function actionDefault($slug) {

        $data = $this->page->getPageBySlug($slug);

        $this->template->pages = $data;

    }

}
<?php
namespace App\Model;

use Nette,

    Nette\Utils\Strings;

class CarouselModel extends \Nette\Object {

    /** @var Nette\Database\Context */

    private $database;

    public function __construct(Nette\Database\Context $database) {

        $this->database = $database;

    }

    /** @return Nette\Database\Table\Selection */

    public function findAll() {

        return $this->database->table('carousel');

    }

    /** @return Nette\Database\Table\ActiveRow */

    public function findById($id) {

        return $this->findAll()->get($id);

    }

    /** @return Nette\Database\Table\ActiveRow */

    public function getPageBySlug($slug) {

        return $this->findAll()->where("slug", $slug)->fetch();

    }

    /** @return Nette\Database\Table\ActiveRow */

    public function insert($values) {

        return $this->findAll()->insert($values);

    }

    /** $return Nette\Database\Table\ActioveRow */

    public function updated($values) {

        return $this->findAll()->where($id)->update($values);

    }

}

Taky jej podobně vypisuji:

<div class="col-sm-12 col-md-3 seznam-vin">
    <ul>
        <li n:foreach="$carousel as $v"><a n:href="Carusel:default, $v->slug">{$v->nazev}</a></li>
    </ul>
</div>
<div class="col-sx-12 col-sm-12 col-md-9 brands">
    {foreach $carousel as $c}
        {foreach $c->related('soubory') as $s}
            <div class="col-sm-4"><a n:href="Carusel:default, $v->slug"><img style="height: 150px;" src="{$basePath}/{$s->cesta}" alt="img"></a></div>
        {/foreach}
    {/foreach}
</div>
petr.jirous
Člen | 128
+
0
-

někde tam tu proměnnou předat musíš, ani ten druhý způsob ti nemůže fungovat

Sveet
Člen | 55
+
0
-

petr.jirous napsal(a):

někde tam tu proměnnou předat musíš, ani ten druhý způsob ti nemůže fungovat

A přesto funguje

David Kudera
Člen | 455
+
+1
-

Což znamená jedině to, že ta proměnná se šabloně předává někde jinde, než v kódech, které jsi sem poslal. $carousel se tam sám objevit nemohl.. Co třeba nějaký base presenter?

Edit: trošku zvláštní dědit od home presenteru. Vlastně to vidím poprvé

Editoval David Kudera (26. 8. 2014 20:46)

Jan Suchánek
Člen | 404
+
0
-

Proc opakujes v tech modelech ten samej kod?

Sveet
Člen | 55
+
0
-

David Kudera napsal(a):

Což znamená jedině to, že ta proměnná se šabloně předává někde jinde, než v kódech, které jsi sem poslal. $carousel se tam sám objevit nemohl.. Co třeba nějaký base presenter?

Edit: trošku zvláštní dědit od home presenteru. Vlastně to vidím poprvé

V BasePresenter je jen formulář, který jsem řešil v předchozí otázce. Jinak typoval bych to spíš na HomepagePresenter jelikož v HomepagePresenter je zápis

protected $carousel;

Tak jsem udělal i ten stejný zápis do presnteru, a nepomohlo

jenicek napsal(a):

Proc opakujes v tech modelech ten samej kod?

Protože funguje

Editoval Sveet (27. 8. 2014 8:12)

David Kudera
Člen | 455
+
0
-

To ale vytvoří jen protected proměnnou v presenteru. Do šablony se musí předat

$this->template->carousel = $this->carousel;

a k opakujícímu se kódu. Stejně tak jako existuje base presenter pro společné věci všech presenterů, kteří od něj dědí, tak stejně tak můžeš vytvořit nějaký base model, který obsahuje společné věci všech ostatních tříd modelu. Pokud jich budeš mít třeba 30 a budeš nějakou věc chtít změnit, budeš to muset udělat všude ručně. A nebo jen jednou…

Sveet
Člen | 55
+
0
-

David Kudera napsal(a):

To ale vytvoří jen protected proměnnou v presenteru. Do šablony se musí předat

$this->template->carousel = $this->carousel;

a k opakujícímu se kódu. Stejně tak jako existuje base presenter pro společné věci všech presenterů, kteří od něj dědí, tak stejně tak můžeš vytvořit nějaký base model, který obsahuje společné věci všech ostatních tříd modelu. Pokud jich budeš mít třeba 30 a budeš nějakou věc chtít změnit, budeš to muset udělat všude ručně. A nebo jen jednou…

A jak tedy danou situaci mohu napravit? Jen prosím ne kompletně přepsat.

Už to mám stačilo do Presenteru přidat tento řádek, který si napsal, díky

$this->template->klobasy = $this->klobasy->findAll();

Jen se nevypíše vůbec nic z tabulky, i když v tabulce je několik záznamu, ale chybu už to nehlásí, o krok v přes. Kde by mohla být chyba?

Editoval Sveet (27. 8. 2014 8:54)

David Kudera
Člen | 455
+
0
-

Sveet napsal(a):

Jen se nevypíše vůbec nic z tabulky, i když v tabulce je několik záznamu, ale chybu už to nehlásí, o krok v přes. Kde by mohla být chyba?

no tak to je zajímavý. Nějak nemůžu přijít na kód, kterým by se tohle mohlo stát. Zkus dát to toho presenteru jen ze zajímavosti třeba tohle:

dump($this->klobasy->findAll()->count());

mělo by to vypsat počet záznamů. I když to počítám s tím, že to ukáže > 0, když říkáš, že data tam jsou. Kdyby jsi v presenteru neinjectoval model klobasy, tak by to zase vyhodilo chybu...... hmm…

co třeba šablona? Možná hloupá otázka, ale jsi ve správné šabloně? Na tom místě, kde se ty klobasy mají vypsat, když tam něco napíšeš ručně, tak se to vypíše?

Sveet
Člen | 55
+
0
-

David Kudera napsal(a):

Sveet napsal(a):

Jen se nevypíše vůbec nic z tabulky, i když v tabulce je několik záznamu, ale chybu už to nehlásí, o krok v přes. Kde by mohla být chyba?

no tak to je zajímavý. Nějak nemůžu přijít na kód, kterým by se tohle mohlo stát. Zkus dát to toho presenteru jen ze zajímavosti třeba tohle:

dump($this->klobasy->findAll()->count());

mělo by to vypsat počet záznamů. I když to počítám s tím, že to ukáže > 0, když říkáš, že data tam jsou. Kdyby jsi v presenteru neinjectoval model klobasy, tak by to zase vyhodilo chybu...... hmm…

co třeba šablona? Možná hloupá otázka, ale jsi ve správné šabloně? Na tom místě, kde se ty klobasy mají vypsat, když tam něco napíšeš ručně, tak se to vypíše?

Když do kódu napíšu něco ručně tak se samozřejmě vypíše to co jsem napsal, a ten dump vypsal

Closure #5eb6
file => "C:\xampp\htdocs\Alkoteka\vendor\nette\database\src\Database\Table\Selection.php" (79)
line => 426
variables => array ()
parameters => "$column" (7)

Editoval Sveet (27. 8. 2014 10:17)

Sveet
Člen | 55
+
0
-

Takže když do HomepagePresenter hodím tento dump

dump($this->template->klobasy = $this->klobasy->findAll()->count());

Tak mi vypíše chybu

Warning
Invalid argument supplied for foreach()

A když to udělám přesně jak je napsáno, tedy takto:

dump($this->klobasy->findAll()->count());

Tak vypíše zase

Notice
Undefined variable: klobasy

A po skrytí chybové hlášky vypíše nulu, přitom záznamy v db jsou

Editoval Sveet (27. 8. 2014 10:27)

David Kudera
Člen | 455
+
0
-

no to poslední je kvůli tomu, že přiřazuješ výsledek z metody count do šablony do proměnné klobasy, která se prochází v cyklu. Aspoň tak ale víme, že ten foreach v šabloně asi funguje..

zkus ten cyklus upravit takle:

{dump $klobasy}
<li n:foreach="$klobasy as $v">
	{dump $v}
	<a n:href="klobasy:default, $v->img">{$v->nazev}</a>
</li>

jen jsem přidal na zkoušku dumpy. Ale zase, jen tak střílím, protože ten kód by měl takhle fungovat a kdyby ne, tak vyhodit chybu. Místo toho ale nedělá nic..

David Kudera
Člen | 455
+
0
-

aháááá.. už asi vím po editaci příspěvku od tebe. Možná.. Pošli celý ten presenter prosím. Nejspíš tam vůbec neinjectuješ ten model asi.. Třeba

Sveet
Člen | 55
+
0
-

David Kudera napsal(a):

no to poslední je kvůli tomu, že přiřazuješ výsledek z metody count do šablony do proměnné klobasy, která se prochází v cyklu. Aspoň tak ale víme, že ten foreach v šabloně asi funguje..

zkus ten cyklus upravit takle:

{dump $klobasy}
<li n:foreach="$klobasy as $v">
	{dump $v}
	<a n:href="klobasy:default, $v->img">{$v->nazev}</a>
</li>

jen jsem přidal na zkoušku dumpy. Ale zase, jen tak střílím, protože ten kód by měl takhle fungovat a kdyby ne, tak vyhodit chybu. Místo toho ale nedělá nic..

Stále stejná chybová hláška

Notice
Undefined variable: klobasy

Celý HomepagePresenter vypadá takto:

<?php

namespace App\FrontModule\Presenters;

use Nette,
    App\Model;

class HomepagePresenter extends BasePresenter {


    /**
     * @autowire
     * @var \App\Model\YoutubeModel
     *
    protected $youtube;
     *
     *
     * @autowire
     * @var \App\Model\CarouselModel
     */
    protected $carousel;

    /**
     * @autowire
     * @var \App\Model\StrankyModel
     *
    protected $stranky;
     *
     * @autowire
     * @var \App\Model\StrankyModel
     */
    protected $klobasy;

    /**
     * @autowire
     * @var \App\Model\SlideshowModel
     *
    protected $slider;
     *
     *
     * @autowire
     * @var \App\Model\TextModel
     */
    protected $text;

    public function renderDefault() {
        /*
        $this->template->yt = $this->youtube->findAll();
        $this->template->stranky = $this->stranky->findAll();

        dump($this->template->klobasy = $this->klobasy->findAll());
        */
        dump($this->klobasy->findAll()->count());
        /*
        $this->template->slide = $this->slider->findAll();
        */
        $this->template->carousel = $this->carousel->findAll();
        $this->template->text = $this->text->findAll()->where('pozice', '2');
        $this->template->text = $this->text->findAll()->where('pozice', '1');
        $this->template->texts = $this->text->findAll()->where('pozice', '0');
    }

}

Editoval Sveet (27. 8. 2014 10:34)

David Kudera
Člen | 455
+
0
-

no tak teď ti tam zase teda ale chybí

$this->template->klobasy = $this->klobasy->findAll()

tím ty záznamy z db předáš do šablony, aby se mohli vypsat

Sveet
Člen | 55
+
0
-

David Kudera napsal(a):

no tak teď ti tam zase teda ale chybí

$this->template->klobasy = $this->klobasy->findAll()

tím ty záznamy z db předáš do šablony, aby se mohli vypsat

I když jej přidám o odstraním dump tak nejde, cache jsem promazal

iguana007
Člen | 970
+
0
-

Já tam vidím jediný problém a to, že před proměnnou protected $stranky; ti chybí lomítko ukončující komentář a nad proměnnou $klobasy mas @var \App\Model\StrankyModel, tam by imho melo byt: @var \App\Model\KlobasyModel

EDIT: těch lomítek ti tam chybí víc – však se podívej, jak ti to tu fórum obarvuje, tj. že tam máš více těch proměnných „zašedlých“

Editoval iguana007 (27. 8. 2014 10:54)

Sveet
Člen | 55
+
-1
-

iguana007 napsal(a):

Já tam vidím jediný problém a to, že před proměnnou protected $stranky; ti chybí lomítko ukončující komentář a nad proměnnou $klobasy mas @var \App\Model\StrankyModel, tam by imho melo byt: @var \App\Model\KlobasyModel

EDIT: těch lomítek ti tam chybí víc – však se podívej, jak ti to tu fórum obarvuje, tj. že tam máš více těch proměnných „zašedlých“

Tohle ovšem nijak nesouvisí s mým dotazem, jelikož je to zakomentované

David Matějka
Moderator | 6445
+
+1
-

@Sveet ale souvisi, jsou to docbloky s anotacemi, ktere nette cte…

Sveet
Člen | 55
+
0
-

Takže ještě jednou od prvního kroku jelikož netuším kde se stala chyba když na mě vyskakuji po pár změnách samé chyby.

HomepagePresenter.php

<?php

namespace App\FrontModule\Presenters;

use Nette,
    App\Model;

class HomepagePresenter extends BasePresenter {


    /**
     * @autowire
     * @var \App\Model\YoutubeModel
     *
    protected $youtube;
     *
     *
     * @autowire
     * @var \App\Model\CarouselModel
     */
    protected $carousel;

    /**
     * @autowire
     * @var \App\Model\StrankyModel
     *
    protected $stranky;
     *
     * @autowire
     * @var \App\Model\KlobasyModel
     */
    protected $klobasy;

    /**
     * @autowire
     * @var \App\Model\SlideshowModel
     *
    protected $slider;
     *
     *
     * @autowire
     * @var \App\Model\TextModel
     */
    protected $text;

    public function renderDefault() {
        /*
        $this->template->yt = $this->youtube->findAll();
        $this->template->stranky = $this->stranky->findAll();
        */
        $this->template->klobasy = $this->klobasy->findAll();
        /**
        dump($this->klobasy->findAll()->count());
        $this->template->slide = $this->slider->findAll();
        $this->template->klobasy = $this->klobasy->findAll();
        */
        $this->template->carousel = $this->carousel->findAll();
        $this->template->textr = $this->text->findAll()->where('pozice', '2');
        $this->template->text = $this->text->findAll()->where('pozice', '1');
        $this->template->texts = $this->text->findAll()->where('pozice', '0');
    }

}

KlobasyModel.php

<?php



namespace App\Model;



use Nette,

    Nette\Utils\Strings;





class KlobasyModel extends \Nette\Object {



    /** @var Nette\Database\Context */

    private $database;



    public function __construct(Nette\Database\Context $database) {

        $this->database = $database;

    }



    /** @return Nette\Database\Table\Selection */

    public function findAll() {

        return $this->database->table('klobasy');

    }



    /** @return Nette\Database\Table\ActiveRow */

    public function findById($id) {

        return $this->findAll()->get($id);

    }



    /** @return Nette\Database\Table\ActiveRow */

    public function getPageBySlug($slug) {

        return $this->findAll()->where("slug", $slug)->fetch();

    }



    /** @return Nette\Database\Table\ActiveRow */

    public function insert($values) {

        return $this->findAll()->insert($values);

    }



    /** $return Nette\Database\Table\ActioveRow */

    public function updated($values) {

        return $this->findAll()->where($id)->update($values);

    }



}

KlobasyPresenter.php

<?php



namespace App\FrontModule\Presenters;



use Nette,

    App\Model;



class KlobasyPresenter extends HomepagePresenter {



     /**

     * @autowire

     * @var \App\Model\CarouselModel

     */

    protected $page;



    public function actionDefault($slug) {



        $data = $this->page->getPageBySlug($slug);

        $this->template->pages = $data;

    }



}

default.latte

<div class="col-sm-12 col-md-3 seznam-vin">
    <ul>
        <li n:foreach="$klobasy as $v"><a n:href="klobasy:default, $v->slug">{$v->nazev}</a></li>
    </ul>
</div>
<div class="col-sx-12 col-sm-12 col-md-9 brands">
    {foreach $klobasy as $v}
        {foreach $c->related('soubory') as $s}
            <div class="col-sm-4"><a n:href="klobasy:default, $v->slug"><img style="height: 150px;" src="{$basePath}/{$s->cesta}" alt="img"></a></div>
        {/foreach}
    {/foreach}
</div>

Chyba:

Notice
Undefined variable: c

Kde se ta chyba může schovávat?

iguana007
Člen | 970
+
0
-

Tak začal bych třeba tím, co jsme ti už tady 2× psali – oprav si ty autowire anotace, pořád je tam vidím špatně

Sveet
Člen | 55
+
0
-

iguana007 napsal(a):

Tak začal bych třeba tím, co jsme ti už tady 2× psali – oprav si ty autowire anotace, pořád je tam vidím špatně

Nevím jak

iguana007
Člen | 970
+
0
-

Sepiš je u všech proměnných tak, jak to popisuje Filip v tomto vlákně: https://forum.nette.org/…a-steroidech

Tj. aby byly ve formátu:

/**
 * @autowire
 * @var \App\Model\YoutubeModel
 */
protected $youtube;

/**
 * @autowire
 * @var \App\Model\CarouselModel
 */
protected $carousel;

/**
 * @autowire
 * @var \App\Model\StrankyModel
 */
protected $stranky;

/**
 * @autowire
 * @var \App\Model\KlobasyModel
 */
protected $klobasy;

/**
 * @autowire
 * @var \App\Model\SlideshowModel
 */
protected $slider;

/**
 * @autowire
 * @var \App\Model\TextModel
 */
protected $text;
iguana007
Člen | 970
+
0
-

Další věc je, v šabloně se snažíš přistupovat k proměnné $c, ale v žádném z těch souborů, co si tady hodil nevídím předávání té proměnné do šablony – tj.:

$this->template->c = .....;

Neuklepnul ses jenom a nechceš tam volat $v->related – tj. zavolat to related nad aktuálně vypisovanou klobásou $v?

Editoval iguana007 (27. 8. 2014 11:32)

Sveet
Člen | 55
+
0
-

iguana007 napsal(a):

Další věc je, v šabloně se snažíš přistupovat k proměnné $c, ale v žádném z těch souborů, co si tady hodil nevídím předávání té proměnné do šablony – tj.:

$this->template->c = .....;

Neuklepnul ses jenom a nechceš tam volat $v->related – tj. zavolat to related nad aktuálně vypisovanou klobásou $v?

Když dám $v tak vypisuje chybu na obrázky, to $c slouží pro img

Nette\Database\Reflection\MissingReferenceException
No reference found for $klobasy->related(soubory).

Je to postaveno na systému v nette

iguana007
Člen | 970
+
0
-

Nette Database jsem zatím nepoužil, ale podle té chyby bych předpokládal, že bude chybět nějaká vazba/klíč mezi tabulkami, ze kterých se data snažíš tahat (tipnul bych si že se bude jednat o tabulky klobasy a soubory) – třeba bude vědět někdo jiný, kdo Nette Database používá, ale ty si to zatím můžeš ověřit :)

David Matějka
Moderator | 6445
+
0
-

ano, muzou za to chybejici FK. V tabulce „soubory“ by mel byt FK na „klobasy“. ukaz strukturu databaze

Editoval matej21 (27. 8. 2014 12:24)

Sveet
Člen | 55
+
-4
-

Struktůra tabulky soubory

CREATE TABLE IF NOT EXISTS `soubory` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `foto_id` int(11) DEFAULT NULL,
  `carousel_id` int(11) DEFAULT NULL,
  `slideshow_id` int(11) DEFAULT NULL,
  `klobasy` int(11) DEFAULT NULL,
  `cesta` varchar(255) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `carousel_id` (`carousel_id`),
  KEY `slideshow_id` (`slideshow_id`),
  KEY `foto_id` (`foto_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=35 ;

Struktůra tabulek ovšem neřeší tento problém

Editoval Sveet (27. 8. 2014 13:05)

iguana007
Člen | 970
+
+4
-

OT: Docela mě baví, jak hned víš v čem určitě problém není, přičemž ti tady několik lidí tvrdí, že to je úplně naopak :D

V tom co si poslal žádný cizí klíč nevidím, takže se nedivím, že ti to nefunguje. V tom SQL dumpu by si měl mít něco jako:

CONSTRAINT `soubory_ibfk_1` FOREIGN KEY (`klobasy_id`) REFERENCES `klobasy` (`id`)

Editoval iguana007 (27. 8. 2014 13:18)

Sveet
Člen | 55
+
0
-

Sloupec v tabulce soubory.sql jsem tedy změnil na klobasy_id ovšem nepomohlo to, kde jinde by mohl být zakopaný problém?

Editoval Sveet (28. 8. 2014 8:19)

iguana007
Člen | 970
+
0
-

Problém bude v tom, že by sis měl ten můj poslední příspěvek přečíst ještě jednou – nikdo ti tady nic o přejmenování nepsal, měl si vytvořit FOREIGN KEY, to je trošku rozdíl.
Pokud ti to není jasné, tak bych tě odkázal nejdříve tady: http://www.linuxsoft.cz/article.php?… Až si to (celý ten seriál) přečteš, tak se vrať tady a dořešíme zbytek.

Sveet
Člen | 55
+
0
-

Omlouvám se, v klasickém PHP bych to zvládl, ale mám již z dřívějška napsaný systém v nette frameworku a ten je alespoň pro mě složitější než klasické PHP, a velká část systému je již hotová, a celý systém se mi přepisovat nechce. V nette jsem začátečník

wicked
Člen | 290
+
0
-

Sveet napsal(a):

Omlouvám se, v klasickém PHP bych to zvládl, ale mám již z dřívějška napsaný systém v nette frameworku a ten je alespoň pro mě složitější než klasické PHP, a velká část systému je již hotová, a celý systém se mi přepisovat nechce. V nette jsem začátečník

Tohle nemá nic společného ani s php, tady se jedná o vytvoření FK v tabulce soubory a směřovat ho na záznam v tabulce klobasy

Sveet
Člen | 55
+
-1
-

Samostatnou tabulku pro klobásy mám, ale nepomohlo to

David Matějka
Moderator | 6445
+
+1
-

pridal si foreign key ze sloupecku „klobasy“ v tabulce „soubory“ na tabulku „klobasy“ a sloupecek „id“?