$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
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?