Optimálnější zjisťování počtu „liků“ a „disliků“ při načítání návštěvní knihy
- Neas
- Člen | 43
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
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
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…