Vypsání sestav nahlášených klubem do soutěže podle kategorii
- rfilip
- Člen | 20
Potřebuji na stránce vypsat soutěžní kategorie a ke každé podrobnosti
o sestavě kterou klub nahlásil. Ve 12 z 20 kategorii může tým
přihlásit po 1 sestavě ve zbylých 8 kategoriích po 2 sestavách.
V presenteru mám metodu:
public function renderRegistration() {
$shows = $this->showrepository->findBy(
array(
"club_id" => $this->club_id,
"competition_id" => $this->competition_id
));
$categories = $this->categoryrepository->findAll();
$this->template->categories = array();
for($i=1;$i<= $categories->count();$i++){
$shows_clone = clone $shows;
$this->template->categories[] = array(
"category"=>$categories[$i],
"shows" => $shows_clone->where("category_id",$categories[$i]->id)
);
}
}
Toto v šabloně vypisuju:
{foreach $categories as $category}
...
{foreach $category["shows"] as $show}
...
{$show->related("member_show")->count("*")}
...
{/foreach}
...
{/foreach}
… jsou nepodstatné části šablony (výpis informací o kategorii a
přihlášené sestavě.
Tento kod má ale dva problémy:
1)Počet členů přihlášené sestavy (tedy
$show->related(„member_show“)->count(„*“)) je správný jen
u první sestavy pak je nula.
Položený dotaz (je jen u první nalezené sestavy)
SELECT COUNT(*), `member_show`.`show_id`
FROM `member_show`
WHERE (`member_show`.`show_id` IN (1))
GROUP BY `member_show`.`show_id`
- Tento kod mi provádí dotaz níže pro každou soutežní kategorii (tedy 20x), jen se mění x od 1 do 20
SELECT ...
FROM `show`
WHERE (`club_id` = '1') AND (`competition_id` = '1') AND (`category_id` = x)
tyto dotazy jsou důsledkem toho for cyklu a užití clone v presenteru.
Užité tabulky a sloupce
show(id,club_id,competition_id,category_id,..)
category(id,…)
member_show(show_id,member_id) – typická m:n spojovací tabulka
Prosím o radu jak tyto dva problémy vyřešit.
- David Matějka
- Moderator | 6445
strilim od boku:
public function renderRegistration() {
$categories = $this->categoryrepository->findAll();
$this->template->categories = array();
foreach ($categories as $category) {
$this->template->categories[] = array(
"category"=>$category,
"shows" => $category->related('show')->where("club_id", $this->club_id)->where("competition_id", $this->competition_id);
);
}
}
Editoval matej21 (19. 6. 2014 14:31)