BC break při přechodu z Nette 2.0.8 na 2.1 – jak dostat data do jednoho selection?

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

Ahoj, ve své aplikaci jsem přešel na dev verzi nette, která mi zadělala na problém. Potřebuji dosat do gridu data ze dvou tabulek (vím, že je to proti filozofii selection, ale jsem limitován gridem, který už nemohu vyměnit)

<?php

// V nette 2.0.8 fungovalo - vytvořil se jednoduchý join s where pro tabulku contact_contactlist

$selection = $connection
		->select('contact.*, contact_contactlist.status')
		->where('contact_contactlist:contactlist_id', $ids);

/**
Výsledek:
SELECT `contact_contactlist`.`status`, `contact`.*
FROM `contact`
INNER JOIN `contact_contactlist` ON `contact`.`id` = `contact_contactlist`.`contact_id`
WHERE (`contact_contactlist`.`contactlist_id` IN (33))
*/

// V nette 2.1 ovšem dvojtečka nefunguje, tak jsem zkoušel zápis trochu upravit.

$selection = $selectioFactory
		->select('contact.*, contact_contactlist.status')
		->where(':contact_contactlist.contactlist_id', $ids);

/**
Výsledkem je tahle nefunkční příšernost, ve druhém joinu se ptá na neexistující slupce:

SELECT `contact`.*, `contact_contactlist`.`status` FROM `contact`
LEFT JOIN `contact_contactlist` ON `contact`.`id` = `contact_contactlist`.`contact_id`
LEFT JOIN `contact_contactlist` ON `contact`.`contact_contactlist_id` = `contact_contactlist`.`id`
WHERE (`contact_contactlist`.`contactlist_id` IN (33))

*/

// Pokud z předchozího příkladu odstraním dotaz na data z druhé tabulky, tedy:

$selection = $selectioFactory
		->select('contact.*')
		->where(':contact_contactlist.contactlist_id', $ids);

/**

Vygeneruje to krásný dotaz, ale chybí mi ten sloupec :-)

SELECT `contact`.* FROM `contact`
LEFT JOIN `contact_contactlist` ON `contact`.`id` = `contact_contactlist`.`contact_id`
WHERE (`contact_contactlist`.`contactlist_id` IN (?))

?>

Máte nějaký tip, jak dostat všechna data, co potřebuji, do jednoho selection?

Editoval thunderbuff (3. 11. 2013 12:49)

hrach
Člen | 1844
+
0
-

Z hlavy:

$selection = $selectioFactory
        ->select('contact.*, :contact_contactlist.status')
        ->where(':contact_contactlist.contactlist_id', $ids);

Na contact_contactlist se musis odkazovat porad stejne. To, ze si to ve where prijounoval spravne jeste neznamena, ze v selectu se pouzija ta prvni definice :) Aktualni chovani povazuji za spravne.

hrach
Člen | 1844
+
0
-

A pokud jde to tvuj povodni zapis, ten je prave dle me taky spatne, akorat nahodou to zadnou chybu nepusobilo :)

thunderbuff
Člen | 164
+
0
-

Super, díky za tipy, pro příště se poučím, tvé řešení funguje :-)