Ich habe eine Laravel-Datenbank mit einer Tabelle für tags
, eine Tabelle für items
und eine Tabelle für item_tag
. Die Tags sind hierarchisch und als Ergebnis versuche ich herauszufinden, welche Tags innerhalb einer Schleife gesetzt wurden.Prüfen, ob etwas mit einer Laravel-Pivot-Tabelle eingestellt wurde
Das ist einfach, ich benutze einfach $item->tags
und es gibt mir meine Tags in einem zugänglichen Objekt, bereit für die Schleife durch.
Das Problem tritt auf, wenn ich überprüfen möchte, ob ein bestimmtes Objekt eingestellt ist, wenn eine Liste von alle Tags angezeigt wird. Ich verwende den folgenden Code für die Prüfung:
function buildTree($tags, $selected = null) {
echo "<ul>";
foreach($tags as $tag) {
echo "<li>";
if($selected[$tag->id]) {
echo "<strong>";
}
echo $tag->name;
if($selected[$tag->id]) {
echo "</strong>";
}
if($tag->children) {
buildTree($tag->children);
}
echo "</li>";
}
echo "</ul>";
}
$item = Item::find(1);
$tags = Tag::whereNull('tag_id')->get();
buildTree($tags, $item->tags);
Die erwartete Ausgabe wäre, dass jeder Tag, der so kühn in dem Baum kommen würde ausgewählt ist. Wenn das passiert wäre, würde ich das natürlich nicht veröffentlichen. Stattdessen wird nur das erste Element in der Struktur hervorgehoben, obwohl es nicht ausgewählt ist. (Das liegt daran, dass $selected
auf diese Weise nicht angesprochen werden sollte).
Was ist der richtige Weg, um diese Informationen zu erhalten?
Ich denke, es gibt ein paar grundlegende Ansätze, die Sie tun könnten. Tag :: get() gibt ein Collection-Objekt vom Typ "\ Illuminate \ Support \ Collection" zurück, das viele Funktionen besitzt, die Sie ausnutzen können. Vielleicht könnten Sie folgendes in Ihrer if-Klausel verwenden: $ selected-> where ('id', $ tag-> id) Sie könnten auch mit den Daten spielen, bevor Sie mit Ihrer Funktion beginnen. So etwas, abhängig von deiner Version von Laravel: Tag :: whereNull ('tag_id') -> get (['id']) -> zupfen ('id); – mattcrowe
@mattcrowe Lustigerweise habe ich es herausgefunden, bevor ich deinen Kommentar bemerkt habe. Ich entdeckte, dass es viele Methoden gibt, die mit einer Sammlung verwendet werden können, und ich habe erfolgreich 'contains' verwendet, um mein Problem zu lösen. – Forest