2017-10-12 1 views
1

Lassen Sie uns sagen, ich habe dieses Laravel Eloquent Modell:Laravel Return modifizierte Array in Sicht

$scores = []; 
$dataScores = Book::where('author_id', '=', $uid) 
      ->select('score') 
      ->get(); 

was zur Folge hat:

[{ 
    "score": 30 
}, 
{ 
    "score": 100 
}, 
{ 
    "score": 17 
}, 
{ 
    "score": 75 
}, 
{ 
    "score": 17 
}, 
{ 
    "score": 0 
}, 
{ 
    "score": 60 
}, 
{ 
    "score": 100 
}, 
{ 
    "score": 17 
}, 
{ 
    "score": 67 
}, 
{ 
    "score": 83 
}, 
{ 
    "score": 50 
}, 
{ 
    "score": 100 
}, 
{ 
    "score": 50 
}, 
{ 
    "score": 83 
}, 
{ 
    "score": 38 
}, 
{ 
    "score": 90 
}, 
{ 
    "score": 10 
}, 
{ 
    "score": 83 
}, 
{ 
    "score": 83 
}, 
{ 
    "score": 60 
}, 
{ 
    "score": 80 
}, 
{ 
    "score": 13 
}, 
{ 
    "score": 33 
}, 
{ 
    "score": 33 
}] 

Also, Figur, die ich, bevor ich die view() zurückkehren, ich würde das tun :

for ($s=0; $s < count($dataScores); $s++) { 
     array_push($scores, $dataScores[$s]->score); 
    } 

    return view(
     'layouts.dashboard.main', 
     [ 
      'menu' => 'book-dashboard', 
      'scores' => $scores 
     ] 
    ); 

So würde zugreifen, ich {{ $scores }} nur in der Ansicht Laravel Klinge und ich dachte, dass ich würde

$scores = [ 
    30, 
    100, 
    17, 
    75, 
    17, 
    0, 
    60, 
    100, 
    17, 
    67, 
    83, 
    50, 
    100, 
    50, 
    83, 
    38, 
    90, 
    10, 
    83, 
    83, 
    60, 
    80, 
    13, 
    33, 
    33 
]; 

erhalten aber stattdessen erhalte ich:

htmlspecialchars() erwartet Parameter 1 Zeichenfolge, Array gegeben zu sein.

Aber wenn ich das vorher-modifizierte Array von nur den Schlüssel/Wert von score/x .. dann zurückgibt es fein. Ich möchte nur die Score-Werte in einem Array.

Antwort

2

Zunächst einmal gedruckt wird, können Sie diesen Code weglassen:

for ($s=0; $s < count($dataScores); $s++) { 
     array_push($scores, $dataScores[$s]->score); 
    } 

verwenden Sie stattdessen nur:

$dataScores = Book::where('author_id', '=', $uid) 
      ->select('score') 
      ->get() 
      ->pluck('score); 

Dieses in einem Array wie $ Partituren = Ergebnis wird [1,2,3,4,5 ...]

Natürlich kann man es nicht mit Blade wie {{$ scrores}} rendern Sie müssen zuerst das Array implodieren.

Do it diese Weise:

return view(
     'layouts.dashboard.main', 
     [ 
      'menu' => 'book-dashboard', 
      'scores' => implode(" ", $scores); 
     ] 
    ); 

Sie erhalten eine Ausgabe von "1 2 3 4 5 6 ..."

+0

Eigentlich kann er diese Variable in Blade rendern, weil das Sammelobjekt die '__toString' Methode implementiert hat – OsDev

+0

Oh, whoa! Das muss ich in der Dokumentation verpasst haben! Vielen Dank. Ich verstehe das. – nn2

0

Versuchen wie folgt aus:

$scores = []; 
$dataScores = Book::where('author_id', '=', $uid) 
      ->select('score') 
      ->get() 
      ->toArray(); 

     foreach($dataScores as $key => $value){ 
      array_push($scores,$value); 
     }  

     return view(
     'layouts.dashboard.main', 
     [ 
      'menu' => 'book-dashboard', 
      'scores' => $scores 
     ] 
    ); 
0

Ich glaube, Sie pluck Sammelmethode verwenden können manuell Schleife tun, um zu vermeiden, und ein zugeordnetes Array nur mit dem Schlüssel/Wert erhalten, die Sie

<?php 
$scores = Book::where('author_id', '=', $uid) 
    ->select('score') 
    ->get() 
    ->pluck('score'); 

brauchen Eigentlich Sie sagten

Aber wenn ich die vorher-modifizierte Reihe von nur den Schlüssel/Wert von score/x .. dann es kommt gut an. Ich möchte nur die Score-Werte in einem Array.

Das funktioniert, weil die Eloquent Kollektionen Objekt der __toString() magische Methode der String-Darstellung des Objekts erhalten zu können, umgesetzt hat also, wenn Sie versuchen, diese

{{$scores}} //you will get [1,2,3,4,5] 
//(the string representation defined into the __toString method) 

zu tun, aber wenn Sie versuchen, zu konvertieren In einem Array werden Sie die Funktionssignatur unterbrechen, weil Sie versuchen, ein Array anstelle einer Zeichenfolge zu übergeben. Wenn Sie also diese Werte in eine benutzerdefinierte Zeichenfolge oder durch Komma getrennte Werte konvertieren möchten, können Sie die Methode implode an Ihren Aufruf anhängen Kette

<?php 
$scores = Book::where('author_id', '=', $uid) 
    ->select('score') 
    ->get() 
    ->pluck('score') 
    ->implode(','); 

Nun, wenn Sie {{$scores}} Ihrer Ansicht verwenden Sie '1,2,3,4,5,6'

+0

Tatsächlich ist die 'pluck' Verfahren läuft sich ein' foreach' bekommen. – Jackowski

+0

Sicher, aber wenn Sie Laravel verwenden, würden Sie versuchen, "redegewandt" zu sein – OsDev