Primitivní spojení dvou tabulek
- Draffix
- Člen | 146
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
- Draffix
- Člen | 146
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
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)
- ViPEr*CZ*
- Člen | 817
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
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!