Primitivní spojení dvou tabulek

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

Zdravím, doteď jsem vše řešil cestou přímého sql dotazu a chtěl bych to předělat do NDB formy. Nicméně jsem skončil hned u tohodle sql dotazu:

$this->connection->query(
                        'SELECT * FROM product, image
             		WHERE product.prod_id = image.product_prod_id
             		AND product.prod_id = ?', $id)->fetch();

Zkoušel jsem to předělat takto:

$this->connection->table($this->tableName, 'image')
->select("*")->where("product.prod_id:image.product_prod_id", $id)->fetch();

Ale vyhodilo mi to chybu: „No reference found for $product->product.“ Sql dotaz mi funguje, tam chyba není. Věděl by někdo kde mám chybu? Děkuji mockrát

vvoody
Člen | 910
+
0
-

Od kedy má funkcia table dva parametre?

Draffix
Člen | 146
+
0
-

vvoody napsal(a):

Od kedy má funkcia table dva parametre?

Teprve s NDB začínám, jen jsem to zkoušel. Můžeš mi tedy poradit jak to převést do správné podoby?

vvoody
Člen | 910
+
0
-

Neviem kde mam začať, lebo príklad kódu ktorý si sem dal by vyhodil chybu ešte pred tým než by sa dostal ku nejakým referenciám. Takže v prvom rade ukáž reálny kód, ktorý si aj spustil a vyhadzuje chybu ktorú si uviedol hore. A taktiež sql dump.

Draffix
Člen | 146
+
0
-

To je přesně ten kód, co mi vyhazuje chybu, nijak jsem ho neupravoval. Jde mi prostě jen o toto:

(
'SELECT * FROM product, image WHERE product.prod_id = image.product_prod_id AND product.prod_id = ?', $id)

A jak to předělat do podoby $this->connection->table()->…
Vztah je 1:N kdy produkt může mít několik obrázků

ViPEr*CZ*
Člen | 817
+
0
-

Například:

$images = $this->connection->table("image")->where("product_prod_id", $id);

foreach($images as $image) {
   $product_name = $image->product->name;
}

Tj. podle idéčka vyberu všechny obrázky k produktu a k nim si mohu dohledat informace o produktu a nebo obráceně.

$product = $this->connection->table("product")->where("prod_id", $id);
// nejsem si teď jistý zda-li to pojede, když tak je potřeba zadat druhý parametr do metody related jako klíč - název sloupce
$images = $product->related("image");

foreach($images as $image) { //výpis obrázků
 $image->...;
}

Ale tady to je vše popsané: https://doc.nette.org/cs/database#…

Editoval ViPEr*CZ* (22. 12. 2012 10:52)

Draffix
Člen | 146
+
0
-

Dobře, ale tím bych získal buď všechno z image nebo produktu. Lze to ale spojit do jednoho, tak aby mi to vrátilo všechno, z image i z produktu? Omlouvám se, jsem nejspíše trochu natvrdlý, že to nechápu, ale ani z dokumentace jsem to moc nepochopil.

ViPEr*CZ*
Člen | 817
+
0
-

Teď nechápu ten dotaz zase já… takhle se to prostě dělá v NDB, jak jsem to poslal. Nevybírá se všechno, ale vždy konkrétní IDéčko přeci. A buď jsem si vybral produkt daného IDéčka a k němu to vybere příslušné obrázky. Nebo si najdu obrázky daného produktu a k nim mi to rovnou vybere informace o tom produktu.

Editoval ViPEr*CZ* (22. 12. 2012 20:28)

Draffix
Člen | 146
+
0
-

Už to konečně chápu, nevěděl jsem, že stačí pouze jedna tabulka a pak podle ní (resp. podle její id) vyhledávat v ostatních tabulkách na ní závislých. Pořád jsem měl zato, že se to musí spojit a získat hned najednou všechna data, vidím ale že to jde lehčím způsobem. Děkuji tedy za vysvětlení a trpělivost!