2017-09-19 1 views
1

Ich habe ein Datenbanktabelle "Dokumente" mit dieser Struktur:Wie bekomme ich ein Breadcrumbs-Array aus einer Abfrage (in Laravel)?

// table documents: 
|id|parent_id|name  | 
|1 |0  |foldername1| 
|2 |0  |foldername2| 
|2 |1  |subfolder | 

In meinem Laravel Modell document.php Ich habe diese Methode:

public function parent() 
{ 
    return $this->belongsTo($this, 'parent_id', 'id'); 
} 

Aber wie kann ich eine bekommen Array mit meinen Brotkrumen in meinem Controller?

Ich habe viele Dinge ausprobiert, aber es funktioniert nicht ... :(

DocumentController.php:

// NOT WORKING EXAMPLE!! 
public function index() 
{ 
    $file = Document::findOrFail(2); 

    if ($file->parent) { 
     $breadcrumbs[] = $this->setBreadcrumbs($file->parent); 
    } 
    dd($breadcrumbs); 

} 

private function setBreadcrumbs(Document $file) 
{ 
    $arr = []; 
    if ($file->parent) { 
     $arr[] = $this->setBreadcrumbs($file->parent); 
    } else { 
     return $arr; 
    } 
    return $file->id; 
} 
+0

Warum wird 'setBreadCrumbs()' rekursiv aufgerufen? Sie können testen, ob Sie $ file-> parent bekommen und sehen, ob Sie überhaupt ein Ergebnis haben. –

+0

Ja, $ file-> parent gibt den richtigen Elternwert zurück. Aber wie kann ich $ file-> parent rekursiv in meinem Controller ausführen? – angelique000

Antwort

1

Wie wäre es nur Brotkrumen auf dem Modell Attribut

Dann können Sie einfach anrufen $file->breadcrumbs.Dies könnte leicht angepasst werden, wenn Sie Dateinamen oder Links an das Array übergeben müssen stattdessen.

+0

Vielen Dank! Das ist genau das, was ich brauche! – angelique000

+0

Eine kleine Frage ... Wie bekomme ich die IDs als Schlüssel in meinem Array? Ich habe versucht: return array_merge ($ this-> Eltern-> Breadcrumbs, [$ this-> id => $ this-> original_name]) und: return [$ this-> id => $ this-> original_name ]; Aber meine Schlüssel sind immer noch 0, 1, 2, usw. – angelique000

+0

Wenn Sie numerische Tasten verwenden, können Sie die Reihenfolge verlieren, die Sie benötigen, um Paniermehl ordnungsgemäß anzuzeigen. Wenn Sie das brauchen, würde ich '[$ this-> id]' durch '['id' => $ this-> id, 'name' => $ this-> original_name]' ersetzen, damit Sie ein richtig geordnetes Array mit haben Sowohl die IDs als auch die Namen sind verfügbar. – Jeff

Verwandte Themen