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

Mury
Člen | 7
+
0
-

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 | 519
+
0
-

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
+
0
-

nightfish napsal(a):

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ě.

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..:/