Nechtěný GROUP při LEFT JOINu

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

Ahoj,

narazil jsem na zvláštní věc :

Mám tabulku v DB ‚projekt‘ spojenou s tabulkou ‚uzivatel‘, kde projekt.uzivatel_id == uzivatel.id.

Mám 3 záznamy.

  1. Příklad

Pokud v presenteru napíšu :

// $db je Nette\Database\Context
$res = $db->table('projekt')->order('uzivatel.name');
// $res je Nette\Database\Table\Selection
foreach($res as $row){
	dump($row);
}

vygeneruje to SQL dotaz :

SELECT `projekt`.`id`
FROM `projekt`
LEFT JOIN `uzivatel` ON `projekt`.`uzivatel_id` = `uzivatel`.`id`
ORDER BY `uzivatel`.`name`

a vrátí mi 3× Nette\Database\Table\ActiveRow, což je v pořádku.

  1. Příklad

Pokud ale napíšu :

// $db je Nette\Database\Context
$res = $db->table('projekt')->select('*')->order('uzivatel.name');
// $res je Nette\Database\Table\Selection
foreach($res as $row){
	dump($row);
}

vygeneruje

SELECT *
FROM `projekt`
LEFT JOIN `uzivatel` ON `projekt`.`uzivatel_id` = `uzivatel`.`id`
ORDER BY `uzivatel`.`name`

ale vrátí pouze 2× Nette\Database\Table\ActiveRow (výsledek je zGROUPovaný podle uzivatel_id). Pokud vygenerovaný SQL dotaz zadám do Admineru, vrátí mi to 3 řádky, stejně, jako u prvního příkladu.

  1. Příklad

Abych dostal z Nette\Database správný výsledek, musím napsat :

// $db je Nette\Database\Context
$res = $db->table('projekt')->select('projekt.*')->order('uzivatel.name');
// $res je Nette\Database\Table\Selection
foreach($res as $row){
	dump($row);
}

Nevím, jestli je to BUG, nebo to tak má být. Pokud to bug není, pak by asi $res v druhém příkladě neměl vracet Nette\Dtabase\Table\Selection, ale Nette\Dtabase\Table\GroupedSelection. Rozhodně mi ale nepřijde v pořádku, že to vrací jiný výsledek, než přímí dotaz do DB.

Zkoušel jsem v Nette 2.1.x a Nette 2.2.0

Mysteria
Člen | 797
+
0
-

Nebude to stejný problém jako zde v 1. odpovědi?