Ich habe eine Tabelle transactions
, die eine paymentable_id
und paymentable_type
Spalte für polymorphe Beziehungen hat. Ich habe ein Modell Plan
, das für Zahlungspläne verwendet wird. Immer wenn eine Transaktion für diesen Plan ausgeführt wird, werden die Transaktionen mit diesem Plan verknüpft, wobei die polymorphe Beziehung verwendet wird.Laravel Raw und Eloquent Abfragen
Jetzt möchte ich alle Plans
aus der Datenbank abrufen, einschließlich eines Feldes namens total_amount
. Das Feld total_amount
sollte die Summe aller transactions.amount
für diesen Plan enthalten.
Bisher und mit Hilfe von einer anderen Frage, die ich fragte, kam ich mit dem Follow-up:
$ Pläne = App \ Models \-Plan :: alle ('*', DB :: RAW ("(SELECT SUM (Betrag) FROM Transaktionen WHERE paymentable_id = plans.id UND paymentable_type = 'App \\ Models \ Plan') als total_amount "));
Was ganz gut funktioniert. Aber ich finde, dass das einfach falsch ist:
WHERE paymentable_id = plans.id AND paymentable_type = 'App\\\\Models\\\\Plan'
Auch die Notwendigkeit, die paymentable_id
zu spezifizieren und paymentable_type
scheint mir falsch. Ich muss dies auch für viele andere Fragen tun, da die polymorphe Beziehung bis zu 5 verschiedene Modelle enthalten kann.
Frage 1. Ist die obige eine richtige Abfrage zu verwenden und wenn ja, gibt es vielleicht auch einen "besseren Weg", um diese Abfrage zu erstellen?
Frage 2. Die nachfolgende Abfrage funktioniert auch, aber ich verstehe vielleicht nicht diesen Teil:
->join('transactions', 'plans.id', '=', 'transactions.paymentable_id')
Jedes Mal, wenn ich die ->where('transactions.paymentable_id', '=', 'plans.id')
sind, ist es wie erwartet funktioniert. Aber ohne diesen Teil ignoriert es grundsätzlich die paymentable_id
.
Alle Zeiger sind sehr geschätzt.
Vielen Dank, dass mir geholfen, lernen ein paar neue Sachen gibt, cool scheint zu funktionieren: – Hardist