Ich habe das folgende Tabellenlayout:
%Vor% products
und metrics
haben eine Viele-zu-viele-Beziehung mit einer Pivot-Spalte mit Wert.
deals
und products
haben auch eine Viele-zu-Viele-Beziehung.
Ich kann Messwerte für ein Produkt mit $product->metrics
abrufen, aber ich möchte alle Messwerte für alle Produkte abrufen können, die mit einem Geschäft in Zusammenhang stehen. So könnte ich beispielsweise Folgendes tun: $deal->metrics
.
Ich habe derzeit Folgendes in meinem Deal
-Modell:
Aber das gibt keine Beziehung zurück, also kann ich es nicht eifrig laden oder verwandte Modelle daraus machen.
Es muss im Beziehungsformat sein, weil sie für meinen Anwendungsfall eifrig geladen werden müssen.
Danke für Ihre Hilfe!
Wenn Sie eine benutzerdefinierte Beziehung haben möchten, können Sie Ihre eigene Erweiterung für die abstrakte Beziehungsklasse erstellen. Zum Beispiel: BelongsToManyThought
.
Aber wenn Sie keine Beziehung implementieren möchten, denke ich, dass sie Ihre Bedürfnisse erfüllen kann:
In App \ Deal.php können Sie die Lösung von @ thomas-van-der-veen
kombinieren %Vor%Sie können sich auf diesen Beitrag beziehen, um zu sehen, wie Sie kann einfach verschachtelte Relationen verwenden.
Mit dieser Lösung können Sie die Beziehung mit der Methode und dem Zugriff auf das Attribut metrics abfragen.
Dies sollte den Trick machen:
Die Datei "Models / Product.php":
%Vor%die Models / Deal.php-Datei:
%Vor%die Models / Metric.php Datei:
%Vor%Von Ihrem Controller:
%Vor%Jetzt haben Sie eine Sammlung von Deals mit Produkten und deren zugehörigen Messwerten. Weitere Informationen finden Sie in den Dokumenten zum verschachtelten Eager-Laden.
Ich habe nicht genug Rep für einen Kommentar, damit ich stattdessen eine Antwort posten kann.
Vor ein paar Tagen habe ich eine ähnliche Frage gestellt und konnte es selbst beantworten. Ich denke, die Lösung funktioniert auch für diese Frage.
Indem Sie die Tabellen manuell verbinden und eine Where-Klausel hinzufügen, können Sie die gewünschten Metriken abrufen.
Mögliche Lösung:
%Vor%Hoffe das hilft:)
Nach @ ntzm-Kommentar bearbeiten
Wenn Sie nur einige Eigenschaften der Metrik-Tabelle und keine der Modell-Funktionen benötigen, können Sie vor den Joins ein select ('*') hinzufügen.
So:
%Vor%Es wird ein metrisches Modell mit allen Attributen der verbundenen Tabellen zurückgegeben.
In diesem Beispiel wird ein Objekt wie folgt zurückgegeben:
%Vor%Da es viele Spalten mit demselben Namen gibt, können Sie nicht auf diese Werte zugreifen. Sie können die Spalten jedoch mehrfach auswählen und umbenennen.
So:
%Vor%Dies führt zu etwas wie:
%Vor%Ich hoffe, das wird etwas lösen :) Natürlich gibt es viel sauberere Wege, um Ihr Problem zu lösen.
Es ist keine "Viele zu viele durch" -Methode verfügbar.
Um alle Metriken in allen Produkten für einen bestimmten Deal verfügbar zu machen, erstellen Sie einen Getter zu Eager Laden Sie alle Produkte und Metriken für den Deal und nutzen Sie Laravels Collections-Methoden.
In Ihrem Deal
-Modell:
Sie können dann die Messwerte für einen Deal mit $deal->getMetrics()
Dies wird eine Sammlung von Metriken-Objekten zurückgeben, die genau das sein sollten, wonach Sie suchen.
Tags und Links laravel-5 laravel-5.2 laravel