Nette\Database: Parametry fetchPairs()

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

Ahoj, aktualizoval jsem na aktuální Nette 2.1dev (ze starší verze stejné varianty, cca 2 měsíce zpět) a nette database u mě v query začala požadovat parametry pro fetchPairs. Je to tak v pořádku, nebo jsem něco rozbil? Selectuji jen dva sloupce. Díky.

hrach
Člen | 1838
+
0
-

Je to v poradku. Byla provedena dekompozice PDOStatement, takze nyni je jina trida, ktera ma novou implementaci fetch pairs, stejnou, jako mela trida Selection. Vzhledem k tomu, ze se pracuje s objektem Row, je mozne volat dane sloupce ciselnymi indexy. fetchPairs(0, 1). (aspon doufam, nikdy jsem to nezkousel, ale takto by to melo fungovat:) )

miler
Člen | 75
+
0
-

Aha, děkuji. A ještě bych se chtěl zeptat:

Takovýto zjednodušený dotaz:

$this->connection->table('calendar')
	->where('type_id', $type);

Kde $type vybírá (zjednodušeně, v originále je tam join):

$this->connection->query('
            SELECT id
            FROM type')
->fetchAll();

mi dříve generoval toto:

SELECT `id`
FROM `calendar`
WHERE (`type_id` IN (2, 11, 12) )

a teď provádí tohle:

SELECT `id`
FROM `calendar`
WHERE (`type_id` IN ((`id` = 2), (`id` = 11), (`id` = 12)))

Mohl bys mi prosím říct jak to mám udělat správně? Ještě jednou díky.

Editoval miler (30. 5. 2013 15:33)

hrach
Člen | 1838
+
0
-

V podstate je divne, ze to fungovalo. Protoze struktura tohoto volani

$this->connection->query('
            SELECT id
            FROM type')
->fetchAll()

je

array(
    array('id' => 1),
    array('id' => 2),
    array('id' => 3),
)

Asi bych to resit:

$types = $factory->table('type'); // ->where(...)
$calendar = $factory->table('calendar')->where('type', $types);