$activeRow->ref() se ptá nejprve na ID a pak na * – jak přeskočit dotaz s ID?

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

Ahoj, právě jsem si přes composer stáhl aktuální nette a narazil jsem na chování $activeRow->ref(), které mi tak úplně nesedí.

<?php

// nejprve si vyberu řádek z tabulky party(id, name)
$party = $this->databaseContext->table('party')->select('*')->where('id', 1)->fetch();

?>
Položí se dotaz:

SELECT *
FROM `party`
WHERE (`id` = 1)

mrknu do párovací tabulky party_article(id, party_id, article_id)

<?php

$selection = $row->related('party_article');

// iteruji nad selection a ptám se na odpovídající záznamy v tabulce article(id, title, content)
$articles = [];
foreach ($selection as $pairArticleParty) {
	$articles[] = $pairArticleParty->ref('article')
}

?>

Tohle vykoná dva dotazy:

SELECT `id`, `party_id`, `article_id`
FROM `party_article`
WHERE (`party_article`.`party_id` IN (1))

SELECT `id`
FROM `article`
WHERE (`id` IN (1, 2))`

V momentě, kdy chci s nějakým řádkem pracovat, se položí další dotaz:

SELECT *
FROM `article`
WHERE (`id` IN (1, 2))

..a tento dotaz teprve vytáhne data. Lze nějak dosáhnout situace, aby se přeskočil dotaz, který se ptá jen na ID z tabulky article, když se za okamžik položí další, který se ptá na celý řádek?