DB where, opakování poslední poslané podmínky

- Mury
 - Člen | 7
 
Ahoj,
stručně, mám tento kód v latte, který je ještě obalený jedním foreachem – tam se vypíši předměty (jen pro představu)
          {foreach $marks_hm->where('student_id = ? AND subject_id = ?', $user->getIdentity()->id, $subject_by_group->subject_id) as $mark}
            <div class="mark_div mark_detail">
              <span class="mark">
                {if (($mark->mark|length) == "1")}
                  {$mark->mark}
                {else}
                  {$mark->mark|truncate:1:""|padRight:2:"-"}
                {/if}
              </span>
              <span class="scale">{$mark->scale}</span>
              <span class="date">{$mark->date|date:'j. n. y'}</span>
            </div>
          {/foreach}
problém nastane hned na 2. řádku nebo-li předmětu.
„$marks_hm“ si jakoby pamatuje poslední poslané podmínky z prvního
řádku a vypíší se i u druhého atd.
tady je ukázka: http://postimg.cz/…10/WN9nG.png
Na obrázku vyznačený 5. řádek:
vznikne: .. WHERE (student_id = 1 AND subject_id = 1)
AND (student_id = 1 AND subject_id = 2)
a já bych potřeboval pouze .. WHERE (student_id = 1 AND
subject_id = 2)
Budu rád, za každou radu.
Díky
Editoval Mury (10. 4. 2018 20:08)

- nightfish
 - Člen | 528
 
Ano, protože where() na Selection při opakovaném
volání přidává další a další podmínky. Špatným, ale funkčním
řešením je zavolat where() před foreachem:
$marks = $marks_hm->where('student_id = ? AND subject_id = ?', $user->getIdentity()->id, $subject_by_group->subject_id);
{foreach $marks as $mark}
...
Lepším řešením je veškeré hrátky s databází přesunout do modelu a do šablony si předávat už jenom předpřipravená data v co nejjednodušší podobě.
Editoval nightfish (10. 4. 2018 21:28)

- Mury
 - Člen | 7
 
nightfish napsal(a):
Ano, protože
where()naSelectionpři opakovaném volání přidává další a další podmínky. Špatným, ale funkčním řešením je zavolatwhere()před foreachem:$marks = $marks_hm->where('student_id = ? AND subject_id = ?', $user->getIdentity()->id, $subject_by_group->subject_id); {foreach $marks as $mark} ...Lepším řešením je veškeré hrátky s databází přesunout do modelu a do šablony si předávat už jenom předpřipravená data v co nejjednodušší podobě.
bohužel stále, nefunguje. Furt to zapisuje dohromady. Ale i tak díky.
To lepší řešení o kterém píšeš.. to právě chci přesunout, ale
nevím přesně jak.
Jelikož mám ten foreach (který jsem tu předložil) obalený ještě
jedním.. a z toho získávám hodnotu:
($subject_by_group->subject_id) tak jak umožnit
(v presenteru $this->template->marks_hm =
$this->classificationManager->getMarks(); – abych zadával argumenty, a
následně v latte jen pouze zadal..) nikde jsem nenarazil na žádný
příklad..:/