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
+
0
-

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 | 1028
+
0
-

Nepomůže, když to napíšeš přímo do toho dotazu?

$table->select('... WHERE vs.product_id = products.id ...')
matoni555
Člen | 40
+
0
-

jiri.pudil napsal(a):

Nepomůže, když to napíšeš přímo do toho dotazu?

$table->select('... WHERE vs.product_id = products.id ...')

Ne, tohle nepomůže. Vyhodí to chybu:

No reference found for $products->vs.
hrach
Člen | 1834
+
0
-

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.

matoni555
Člen | 40
+
0
-

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.
enumag
Člen | 2118
+
0
-

To je tím že DiscovedReflection si s view neumí poradit, jak už jsem před měsícem uvedl zde (bohužel bez reakce).

matoni555
Člen | 40
+
0
-

Taky jsem na to přišel. Nastavil jsem ConventionalReflection a funguje to, ale chtěl bych používat DiscoveryReflection. Takže mám stejný problém jako ty.

hrach
Člen | 1834
+
0
-

Vubec nechapu, jakej ma nifty grid problem. Klasicka query vraci normalni Traversable objekt. Pokud ma timto problem, tak to bude pekne zprasena vec a mel by ses podivat po Nextras\Datagrid :D

Do vlakna o view jsem odpovedel.