2017-12-16 4 views
0

Meine MySQL-Tabelle sieht wie folgt aus (der relevante Teil) Verwendung:eine foreach Variable in einer Laravel Ansicht

student_id (int) | engmins(int) | totalmins(int) | created_at (datetime)  
1    | 50   | 100   | 2017-12-15 00:00:00 
1    | 20   | 45    | 2017-12-15 00:00:00 

habe ich den folgenden Code:

$students = StudentDetails::with('student','studentschool','classactivity') 
    ->where('class', 1) 
    ->orderBy('studentgrade', 'DESC') 
    ->get(); 

$calculatePercentage = array(); 

foreach ($students as $s) 
{ 
    $fetchEngClassPercents= DB::table('ClassActivity') 
    ->select(DB::raw('round((sum(engmins) * 60)/(sum(totalmins) * 60) * 100) as percents')) 
    ->where('created_at', '>=', Carbon::now()->subDays(30)) 
    ->where('student_id', '=', $s->student->id)->get();  
    foreach($fetchEngClassPercents as $f) 
    { 
     $calculatePercentage = $f->percents; 
     var_dump($calculatePercentage); //Debug purposes 
    } 
} 

var_dump($calculatePercentage); //Debug purposes 

$params = [ 
    'engClassPercentage' => $calculatePercentage, 
    'studentInfo'  => $students, 
]; 

return view('user.classes.engclass.index', $params); 
  • Var_dump innerhalb der Schleife ausführt Zeichenfolge (2) "43" NULL
  • var_dump AUSSERHALB der Schleife wird ausgeführt NULL

Dies ist, wie es in der Ansicht aussieht:

<td> 
    @foreach($engClassPercentage as $p) 
     {{ $p->percents }} 
    @endforeach 
</td> 

nichts Das funktioniert nicht in der Ansicht, es zeigt einfach.

Aus irgendeinem Grund bleibt $ calculatePercentage außerhalb der Schleife null (nach vorherigem Versuch, die Variable auszugeben). Wenn es in der foreach-Schleife ist, führt es die Abfrage aus.

Die seltsame Sache ist, dass ich das Array ($ calculatePercentage) außerhalb der Schleife deklariert es mit der Variable in der foreach-Schleife zugewiesen.

Ich bin an dieser Stelle ziemlich verloren, um ehrlich zu sein, und ich würde mich freuen, wenn ich Hilfe bekommen kann.

+0

versuchen Sie es wie diese Rückansicht verwenden ('user.classes.engclass.index') -> mit ('engClassPercentage', $ calculatePercentage); –

+0

Ich habe andere Variable, die durch $ Ressourcen weitergegeben wird, wie würde ich es dann tun? –

+0

$ params = [ 'engClassPercentage' => $ calculatePercentage, 'studentInfo' => $ Studenten, ]; Rückansicht ('user.classes.engclass.index') -> mit ($ params); –

Antwort

1

Änderung $ calculatePercentage = $ f-Prozent; wie unten zu mögen. Dann in Foreach Teil $ p-> Prozent zu $ ​​p.

$calculatePercentage[] = $f->percents; 

@foreach($engClassPercentage as $p) 
    {{$p}} 
@endforeach 
+0

Dies funktionierte. Jetzt wird dieselbe Berechnung für alle Enteries angewendet (auch wenn student_id 2 ist und er nichts hat, zeigt es die gleiche prozentuale Berechnung für student_id). 1. –

+0

Können Sie das genauer erklären? – HiKangg

+0

Meinst du, Prozentsatz Ergebnisse sind gleich, wenn Student_id ist 2 und 1, bedeutet nichts und eine bestehende, richtig? – HiKangg

2

$ calculatePercentage wird immer auf jeder Schleife überschreibt es Taste

auf ein Array ändern
$calculatePercentage[] = $f->percents; 

Dann in Ihrem foreach rufen Sie den $ params Array

@foreach($params['engClassPercentage'] as $p) 
+0

Ich habe immer noch versucht, "versucht, die Eigenschaft von Nicht-Objekt zu bekommen" in der Ansicht, während var_dump Array ausführt (1) {[0] => string (2) "67"} –

0

Sie sind nicht Werte zu speichern, die immer ist berechnet in foreach-Schleife:

Daher die Werte nicht nach Ihren Anforderungen bestehen.

Aktualisiert Code:

foreach ($students as $s) 
{ 
    $fetchEngClassPercents= DB::table('ClassActivity') 
    ->select(DB::raw('round((sum(engmins) * 60)/(sum(totalmins) * 60) * 100) as percents')) 
    ->where('created_at', '>=', Carbon::now()->subDays(30)) 
    ->where('student_id', '=', $s->student->id)->get();  
    foreach($fetchEngClassPercents as $f) 
    { 
     $calculatePercentage[] = $f->percents; // <-- This line is edited. 
    } 
} 
Verwandte Themen