2016-09-26 5 views
0

Ich bin absolut ratlos durch dieses Problem, wo ich zahlreiche Tests ausprobiert habe, um die Ursache des Problems zu ermitteln. In meinem Controller weise ich meinem Array $players eine Reihe von Werten zu. Wenn ich die Variable opprank entferne, funktioniert alles gut. Wenn ich es aber enthalten, erhalte ich die Fehler Nachricht

nicht definierte Eigenschaft: stdClass :: $ opprank

Ich habe versucht, die Werte von $players Dumping, wo der opprank Wert angezeigt wird wie erwartet. Ich habe versucht, es auf einen statischen Wert von "10" im Gegensatz zu dem DB-Wert einzustellen, aber den gleichen Fehler zu erhalten. Hoffentlich kann jemand vor Ort, wo ich falsch werde ...

SystemController.php

  foreach ($teams as $team) 
      { 
       if ($players[$key]->team == $team->id) 
       { 
        // Replace Team ID with Team Short Code for Display Purposes 
        $players[$key]->team = $team->code; 

        $matchups = DB::table('schedule')->where('week', $week->value)->get(); 

        foreach ($matchups as $matchup) 
        { 
         if ($team->id == $matchup->home_team) 
         { 
          $opp = DB::table('teams')->select('code', 'rank')->where('id', $matchup->away_team)->first(); 

          $players[$key]->opponent = $opp->code; 
          $players[$key]->opprank = $opp->rank; 
          $players[$key]->status = 'Home'; 
         } 
         else if ($team->id == $matchup->away_team) 
         { 
          $opp = DB::table('teams')->select('code', 'rank')->where('id', $matchup->home_team)->first(); 

          $players[$key]->opponent = $opp->code; 
          $players[$key]->opprank = $opp->rank; 
          $players[$key]->status = 'Away'; 
         } 
        } 
       } 
      } 

      foreach ($positions as $position) 
      { 
       if ($players[$key]->position == $position->id) 
       { 
        $players[$key]->position = $position->short_name; 
       } 
      } 
     } 

     return $players; 
    } 
} 

players.blade.php

    <table class="table table-striped table-bordered table-hover" id="dt-players-all"> 
         <thead> 
          <tr> 
           <th>Position</th> 
           <th>Player</th> 
           <th>Team</th> 
           <th>Opponent</th> 
           <th>Game</th> 
           <th>Opp. Rank</th> 
           <th>FPPG</th> 
           <th>Salary</th> 
          </tr> 
         </thead> 
         <tbody> 

          @foreach ($players as $player) 

           <tr> 
            <td>{{$player->position}}</td> 
            <td>{{$player->name}} <font color="red"><b>{{$player->injury_status}}</b></font></td> 
            <td>{{$player->team}}</td> 
            <td>{{$player->opponent}}</td> 
            <td>{{$player->status}}</td> 
            <td class="center"> 

             @if ($player->opprank <= 10) 
              <font color="red"><b>{{$player->opprank}}</b></font> 
             @elseif ($player->opprank > 10 && ($player->opprank <= 20)) 
              <b>{{$player->opprank}}</b> 
             @else 
              <b><font color="green">{{$player->opprank}}</font></b> 
             @endif 

            </td> 
            <td class="center">{{$player->fppg}}</td> 
            <td class="center">${{$player->salary}}</td> 
           </tr> 

          @endforeach 

         </tbody> 
        </table> 
+0

Welche Linie den Fehler verursacht? – Phil

+0

Bitte versuchen Sie es als $ player [$ key] [opprank] = $ opp-> Rang; und alles. Probier diese. –

+0

@Phil Es sagt seine Zeile 49 in der players.blade.php, aber das ist nur die leere Zeile über der if/elseif/else-Anweisung. –

Antwort

3

Initialisiere es zu einem NULL-Wert oder etwas Wert, den Sie benötigen, nachdem Sie $key bekommen haben - ich denke, dass es innerhalb einer foreach() Schleife sein sollte, die in der Frage nicht sichtbar ist.

$players[$key]->opprank = NULL; 

Wie ich denke, Sie bekommen diese Fehler, da Sie den Wert opprank in einem gewissen Zustand versetzt, die, wenn die Bedingung zuweisen versagt wird nicht ausgeführt. Wenn es nur eine Warnung ist, weisen Sie sie auf diese Weise zu.

finden Sie im else Teil Zugabe (wenn das funktioniert - die beste fix sein)

if() { 
    // your code 
} 
else if() { 
    // your code 
} 
else { 
    $players[$key]->opprank = NULL; 
} 

Beim letzten Versuch können Sie natürlich tun, um eine isset() oder empty() für sie überprüfen!. Nur wenn Ihre Ausgabe in Ordnung ist und Sie nur Warnungen loswerden wollen.

if(isset($player->opprank)) { 
    // existing code for if, else if and else 
} 
+1

Ja, weil Sie if-Anweisungen verwenden, bevor Sie das Attribut opprank setzen, haben einige der Spieler es nicht. Sie können auch das Vorhandensein des Opprank-Attributs in Ihrer Vorlage überprüfen, bevor Sie es verwenden. –

+0

fügen Sie diese Zeile an anderer Stelle hinzu. –

+0

nach if ... else if ... else {set Null} –

1
foreach ($matchups as $matchup) 
       { 
        if ($team->id == $matchup->home_team) 
        { 
         $opp = DB::table('teams')->select('code', 'rank')->where('id', $matchup->away_team)->first(); 

         $players[$key]->opponent = $opp->code; 
         $players[$key]->opprank = $opp->rank; 
         $players[$key]->status = 'Home'; 
        } 
        else if ($team->id == $matchup->away_team) 
        { 
         $opp = DB::table('teams')->select('code', 'rank')->where('id', $matchup->home_team)->first(); 

         $players[$key]->opponent = $opp->code; 
         $players[$key]->opprank = $opp->rank; 
         $players[$key]->status = 'Away'; 
        } 
        else{ 
        $players[$key]->opprank = NULL; 
        } 
       } 
+0

Probieren Sie dies aus, aber immer noch den gleichen Fehler. Da die Fehlermeldung "Undefined Property" lautet, scheint das Problem darin zu bestehen, dass die tatsächliche Variable nicht gelesen wird, im Gegensatz zum Wert selbst. –

+0

@BrettPowell verwenden Sie Log :: info ($ players) vor der Rückkehr aus der Controller-Datei. –

Verwandte Themen