Vypsání sestav nahlášených klubem do soutěže podle kategorii

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

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`
  1. 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
+
+2
-

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)

rfilip
Člen | 20
+
0
-

Moc díky, funguje to nádherně oba problémy to vyřešilo. Jen drobná chybka na tom dlouhém řádku je nadbytečný středník