Nette\Database a dvojznačný název sloupce
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- matoni555
- Člen | 40
Zdravím,
mám v Nette\Database tento dotaz:
$this->connection->table($this->tableName)->select('*, IF(code IS NOT NULL, code, (SELECT GROUP_CONCAT(code) FROM products_variants AS vs WHERE product_id = id)) AS codes')->where('removed', 0);
Vygeneruje to tento dotaz:
SELECT *, IF(`code` IS NOT NULL, `code`, (
SELECT GROUP_CONCAT(`code`)
FROM `products_variants` AS `vs`
WHERE `product_id` = `id`)) AS `codes`
FROM `products`
WHERE (`removed` = 0)
Já však potřebuji, aby to vygenerovalo toto:
SELECT *, IF(`code` IS NOT NULL, `code`, (
SELECT GROUP_CONCAT(`code`)
FROM `products_variants` AS `vs`
WHERE `vs`.`product_id` = `products`.`id`)) AS `codes`
FROM `products`
WHERE (`removed` = 0)
Jak to Nette donutit?
Díky
- jiri.pudil
- Nette Blogger | 1032
Nepomůže, když to napíšeš přímo do toho dotazu?
$table->select('... WHERE vs.product_id = products.id ...')
- matoni555
- Člen | 40
hrach napsal(a):
Vzhledem k tomu, ze jedna o docela tabulkovy mix, jeste s GROUP_CONCAT, tak bych pouzil normalni query. Zakladni teze
Nette\Database\Table
je vybírat data jen z jedné tabulky.
Nakonec jsem to chtěl přes query řešit, ale používám NiftyGrid, který musí iterovat přes výsledky, takže to nepřipadá v úvahu.
Vytvořil jsem si view, ale mám problém, že Nette hlásí chybu při hledání primárního klíče:
CREATE view products_with_codes
as
SELECT `products`.*, IF(`products`.`code` IS NOT NULL, `products`.`code`, GROUP_CONCAT(`products_variants`.`code` SEPARATOR ", ")) as `codes`
FROM `products`
LEFT JOIN `products_variants` ON `products`.`id` = `products_variants`.`product_id`
GROUP BY `products`.`id`;
Row does not contain primary column data.