Laravel-Sammlung zu Array

74

Ich habe zwei Modelle Postund Comment; Viele Kommentare gehören zu einem einzigen Beitrag. Ich versuche, auf alle Kommentare zuzugreifen, die mit einem Beitrag als Array verknüpft sind.

Ich habe folgendes, das eine Sammlung gibt.

$comments_collection = $post->comments()->get()

Wie würde ich daraus $comments_collectionein Array machen? Gibt es eine direktere Möglichkeit, über beredte Beziehungen auf dieses Array zuzugreifen?

datavoredan
quelle

Antworten:

119

Sie können toArray () von eloquent wie folgt verwenden .

Die toArrayMethode konvertiert die Sammlung in ein einfaches PHP-Array. Wenn die Werte der Sammlung eloquente Modelle sind, werden die Modelle auch in Arrays konvertiert

$comments_collection = $post->comments()->get()->toArray()

Von Laravel Docs:

toArray konvertiert auch alle verschachtelten Objekte der Sammlung, die eine Instanz von Arrayable sind, in ein Array. Wenn Sie das zugrunde liegende unformatierte Array erhalten möchten, verwenden Sie stattdessen die Methode all .

Drudge Rajen
quelle
Manchmal löst diese Methode eine Ausnahme aus, wenn keine Daten vorhanden sind.
Akshay Kulkarni
Können Sie mir den Fall sagen, in dem es eine Erwartung auslöst? Ich habe versucht, mit
Nulldaten,
1
Nit-Pick: Wenn die Array-Elemente implementiert werden \Illuminate\Contracts\Support\Arrayable, werden sie auch rekursiv in Arrays konvertiert. Das schließt eloquente Modelle ein.
Nevvermind
3
Dies sollte nicht die beste Antwort sein. ->toArray()konvertiert die Sammlung nicht in ein Array, sondern konvertiert den gesamten Inhalt in Arrays, einschließlich der Elemente der Sammlung. ->all()sollte die akzeptierte Antwort sein.
Sebastien C.
@SebastienC. OP hatte nach der Möglichkeit gefragt, die Sammlung in ein Array umzuwandeln. Also, toArray()ist gut dafür. Außerdem habe ich die Antwort mit Dokumentation aktualisiert.
Drudge Rajen
7

Use- all()Methode - dient zur Rückgabe von Sammlungsgegenständen:

/**
 * Get all of the items in the collection.
 *
 * @return array
 */
public function all()
{
    return $this->items;
}
eithed
quelle
1

Verwenden Sie collect($comments_collection).

Andernfalls versuchen Sie json_encode($comments_collection), zu json zu konvertieren.

TechPotter
quelle
0

Versuchen Sie , die Funktion im Array wie folgt zu sammeln :

$comments_collection = collect($post->comments()->get()->toArray());

Diese Methoden können Ihnen helfen

toArray () mit collect ()

Ferhat KOÇER
quelle