Optimálnější zjisťování počtu „liků“ a „disliků“ při načítání návštěvní knihy

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

Ahoj.
Mám návštěvní knihu a u každého příspěvku možnost „like“ a „dislike“. Potřeboval jsem nějak zajistit, aby se zobrazovaly počty liků a disliků na příspěvku, čehož jsem nakonec docílil tak, že jsem si z presenteru do tempatu poslal instanci připojení k databázi,

$this->template->db = $this->context->model->db;

a v samotném templatu napsal:

{$db->table('reaction')->where(array('reaction' => 'like', 'stuff_id' => $c->id))->count('*')}

Avšak kvůli tomuto se při každém načtení návštěvní knihy spustí dalších 2*počet_příspěvků_na_stránku sql dotazů, navíc instance připojení k db v templatu mi nepřipadá jako nejlepší řešení. Proto bych se chtěl zeptat, zda pro mou situaci neexistuje optimálnější řešení.
Děkuji

Editoval Neas (7. 1. 2012 18:18)

newPOPE
Člen | 648
+
0
-

Na zaciatok, velmi zly pristup.

V presenteri si priprav data pre render. Napr. pole prispevkov ktore v sablone len preiterujes a vypises.

<?php
	$this->template->comments = $this->context->db->table('reaction')->where(array('reaction' => 'like', 'stuff_id' => $c->id))->count('*') // toto by este slo rozbit na drobne a pouzit modely
?>

Co sa tyka toho count, niesol by som si data pre vypis like a dislike priamo u zaznamu prispevku a ked je to potrebne tak este mal tabulku zo zdrojom :-). ked da niekto like/dislike tak len proste zapises do tabulky kto kam dal like/dislike a upravis pratricny zaznam o prispevku (like++, dislike++ a pod.)

Peetee
Člen | 75
+
0
-

Z zaslaného popisu není úplně zřejmé schéma db. Tuším, že v jedné tabulce máš uloženy příspěvky a v druhé máš „like“ a „dislike“.

Občas je výhodnější mít informace o počtu „reakcí“ uloženy přímo v záznamu příspěvku. (přidat do tabulky příspěvků dva sloupečky označující počet like a dislike, pří reakci toto číslo aktualizovat).

Šlo by to asi udělat i jinak, pokud máš správně nastaveny cizí klíče, pak bys mohl napsat:

{$c->related('reaction')->count('*')}

To toto řešení by mělo provést právě jeden dotaz…