2017-07-21 2 views
0

In meinem Laravel-Projekt versuche ich einige Daten aus der Datenbank anzuzeigen. Die Daten werden aus mehreren Tabellen nachgeschlagen. Die Struktur sieht wie folgt aus:So übergeben Sie mehrere Modelle an Laravel View

  • Gruppe (zB name = "G1")

    • Book (zB name = "B1")
    • ändern (zB name = "P1")
    • Tinte (zB Name = "I1")
  • Gruppe (zB name = "G2")

    • Buchen (z.B. name = "B2")
    • ändern (zB name = "P2")
    • Ink (zB name = "I2")

Gruppe, Buch, Bleistift & Ink sind Eloquent/Model Klassen. Ich kann die Daten gut untersuchen (mit der ganzen Beziehung zwischen den Tabellen). Nun möchte ich diese Daten an die Laravel View php senden, damit sie angezeigt werden kann. In der Ansicht php wird ein Drop-Down-Element für die Gruppe mit dem Gruppennamen (zB "G1" oder "G2") angezeigt. Wenn der Benutzer "G1" auswählt, sollte die Seite alle G1-bezogenen Informationen anzeigen (zB B1 , P1, I1) und für "G1" ist es verwandte Informationen. Standardmäßig (oder beim Laden der Seite) sollte die erste Gruppe in der Liste und die zugehörigen Informationen angezeigt werden.

Ich möchte wissen, wie sollte ich die Daten packen (ich glaube, ist ein Array) und verwenden Sie es in Sicht php? Und wie wird die Ansicht aktualisiert, wenn sich die Auswahl im Dropdown-Menü "Gruppe" geändert hat?

Vielen Dank!

Antwort

0

In Ihrem Controller-Methode

$groupOne = Group::where()->get(); // Your Group One Query, Whatever It May Be 
$groupTwo = Group::where()->get(); // Your Group Two Query, Whatever It May Be 

return view('pathTo.someView', compact('groupOne', 'groupOne')); 

Sie in Ihrer Klinge temeplate eine Schleife durch diese können. Ex:

@foreach($groupOne as $item) 

@endforeach 

@foreach($groupTwo as $item) 

@endforeach 

Wenn Sie je den Blick/Inhalt der Seite zu ändern, auf Änderung einer Dropdown-Liste werden Sie JavaScript dafür verwenden. Laravel kommt mit VueJS aus der Box. Ich schlage vor, dort für dynamisch wechselnden Inhalt zu beginnen.

+0

Danke für die schnelle Antwort! Hat eine Frage 'return view ('pathTo.someView', compact ('groupOne', 'groupOne'));' Verzeiht meine Ignoranz, das bringt zwei Strings zurück zur Ansicht? – N0000B

+0

Überprüfen Sie die Funktion [compact] (http://php.net/manual/en/function.compact.php) im PHP-Handbuch. Es verwendet die zwei Variablennamen als Referenz und erstellt ein Array ihrer Werte. Was an die Ansicht gesendet wird, ist ein Array mit zwei Schlüsseln: 'groupOne' und 'groupTwo', die jeweils die entsprechende Sammlung als Wert enthalten. – Nonetallt

+0

Vielen Dank! – N0000B

0

Zuerst sammeln Sie die Daten, die Sie mit einer beredten Abfrage benötigen:

$groups= \App\Group::where('')->get(); 

Diese Methode gibt eine Collection Klasse mit einem Bündel von Hilfsmethoden. Wenn Sie eine einzelne Instanz haben möchten, verwenden Sie stattdessen -> first().

Dann können Sie Ihre Daten auf einen Blick in einem zweiten Parameter wie folgt passieren:

return view('myview', [ 
    'groups' => $groups 
]); 

Und schließlich können Sie Blade Templat-Richtlinien verwenden, um Ihre Liste Ihrer Ansicht Datei zu machen:

<select> 
@foreach($groups as $group) 
    <option>{{$group->book->attribute}}</option> 
@endforeach 
</select> 

Um die Dropdown-Auswahl dynamisch zu aktualisieren, müssen Sie dynamisches JavaScript verwenden, um das entsprechende Dropdown anzuzeigen. Wenn Sie viele Gruppen oder andere Modelle haben, sollten Sie mit ajax wahrscheinlich nur eine einzelne Gruppe gleichzeitig holen, wenn die Auswahl geändert wird. Wenn Sie ajax zum dynamischen Laden der Listen verwenden, können Sie mithilfe der blade-Direktive die ursprüngliche Liste rendern, aber nicht darauf vertrauen, dass blade eine serverseitige Rendering-Engine ist und den Inhalt nicht dynamisch ändern kann, nachdem die Ansicht gesendet wurde die Klientenseite.

0

Geben Sie jedem Modell eine Variable und übergeben Sie es an die Ansichtsmethode. Es ist das zweite Argument: Ich verwende compact('customerModel', 'staffModel'); sieht viel sauberer aus.

Verwandte Themen