Využij akce až 30 % zdarma při nákupu e-learningu. Více informací. Zároveň je tento týden sleva až 80 % na e-learning týkající se C# .NET
Hledáme nového kolegu do redakce - 100% home office, 100% flexibilní pracovní doba. Více informací.
Avatar
jAk3r
Člen
Avatar
jAk3r:4.4.2020 19:38

Zdravím Vás všechny narazil jsem na zajímavost. Mám script

self::ATTR_PRICE => $this->database->table(ProductManager::TABLE_NAME . '_' . self::TABLE_NAME)
                ->where(self::COLUMN_ID, $orderId)
                ->sum(self::COLUMN_QUANTITY . ' * ' . ProductManager::TABLE_NAME . '.' . ProductManager::COLUMN_PRICE)

Který generuje tento dotaz

SELECT SUM(`quantity` * `product`.`price`)
FROM `product_e_order`
WHERE (`e_order_id` = 108)

Ale háže mi to chybu

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'product.price' in 'field list'

ale přitom v tabulce product řádek price je.

Začal jsem takové chyby monitorovat poté co se mi aktualizovala nette db.

Co je tady špatně?

Nějak na to nemohu přijít.

Díky

Editováno 4.4.2020 19:39
Odpovědět
4.4.2020 19:38
Pokud něčeho chceš dosáhnout, musíš si za tím jít.
Avatar
Lu Kiss
Člen
Avatar
Lu Kiss:5.4.2020 11:02

atribut (sloupec) price volas nad tabulkou product, jenomze v tvem dotazu ti chybi join na tabulku product. aktuálě tam delas select nad product_e_order.
tipl bych si, že tvuj dotaz měl vypadat nejak takto:

SELECT SUM(`quantity` * `product`.`price`)
FROM `product_e_order`
LEFT JOIN product on ( product_e_order.product_id = product.id)
WHERE (`e_order_id` = 108)
 
Nahoru Odpovědět
5.4.2020 11:02
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!
Avatar
Petr 'PePa' Pavel:28.4.2020 15:17

Řekl bych, že Nette Database nevěděla, jak přidat ten JOIN. Důvody můžou být dva:

  1. používáš databázový engine (např. MySQL InnoDB), který umí cizí klíče, ale nemáš ho definovaný (na vazbu mezi product_e_order a product)
  2. používáš engine, který cizí klíče nativně neumí (např. MySQL MyISAM), a tabulky a atributy cizích klíčů jsi definoval jinak, než Nette Database očekává (product_e_or­der.product_id a product.id)

To (b) jde někdy vyřešit napsáním vlastní Structure, ale imho je lepší prostě změnit db engine a cizí klíče používat nativně.

Nebo c) - zapomněl jsi smazat cache, takže se změny v cizích klíčích nezačaly používat :-)

 
Nahoru Odpovědět
28.4.2020 15:17
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 3 zpráv z 3.