Ich habe 2 verknüpfte Tabellen in Eloquent, nämlich Themen und Benutzer.
Themenmodell:
public function user() {
return $this->belongs_to('User');
}
Benutzermodell:
public function themes() {
return $this->has_many('Theme');
}
Mein eloquenter API-Aufruf sieht wie folgt aus:
return Response::eloquent(Theme::with('user')->get());
Dies gibt alle Spalten vom Thema zurück (das ist in Ordnung) und alle Spalten vom Benutzer (nicht in Ordnung). Ich benötige nur die Spalte "Benutzername" aus dem Benutzermodell. Wie kann ich die Abfrage darauf beschränken?
Response
welche Art von Klasse verwende, die ich importieren muss?Antworten:
Ändern Sie Ihr Modell, um anzugeben, welche Spalten ausgewählt werden sollen:
Und vergessen Sie nicht, die Spalte anzugeben, der Sie beitreten.
quelle
Für Laravel> = 5.2
Verwenden Sie die Methode -> pluck ()
Für Laravel <= 5.1
Verwenden Sie die Methode -> lists ()
quelle
Sie können im Parameter get wie folgt eine Reihe von Feldern angeben:
UPDATE (für Laravel 5.2) In den Dokumenten können Sie Folgendes tun:
quelle
SQLSTATE[42S22]: Column not found
und SQL enthält die Tabelle nicht in derwith
. Die SQL, die im Fehler angezeigt wird, lautet "SELECT fk_table.column1 FROM main_table".Ich weiß, Sie fragen nach Eloquent, aber Sie können es mit Fluent Query Builder tun
quelle
So mache ich es
Erste Antwort von user2317976 hat bei mir nicht funktioniert, ich benutze laravel 5.1
quelle
pivot
zu $ versteckt Array von Post Modelprotected $hidden = ['pivot']
Eine andere Möglichkeit besteht darin, die
$hidden
Eigenschaft des Modells zu verwenden, um die Spalten auszublenden, die Sie nicht anzeigen möchten. Sie können diese Eigenschaft im laufenden Betrieb definieren oder Standardeinstellungen für Ihr Modell festlegen.Jetzt wird das Benutzerkennwort ausgeblendet, wenn Sie die JSON-Antwort zurückgeben.
Auf ähnliche Weise können Sie es auch im laufenden Betrieb einstellen.
quelle
static
.Verwendung mit Paginierung
quelle
user2317976 hat eine großartige statische Methode zur Auswahl der Spalten verwandter Tabellen eingeführt.
Hier ist ein dynamischer Trick, den ich gefunden habe, damit Sie mit dem Modell alles bekommen, was Sie wollen:
Ich habe gerade festgestellt, dass dieser Trick auch mit load () gut funktioniert. Das ist sehr praktisch.
Stellen Sie sicher, dass Sie auch den Schlüssel der Zieltabelle angeben, da er sonst nicht gefunden werden kann.
quelle
Diesen Weg:
quelle
Ich weiß, dass dies eine alte Frage ist, aber wenn Sie eine API erstellen, wie es der Autor der Frage tut, verwenden Sie Ausgabetransformatoren, um solche Aufgaben auszuführen.
Transofrmer ist eine Schicht zwischen Ihrem tatsächlichen Datenbankabfrageergebnis und einem Controller. Es ermöglicht die einfache Steuerung und Änderung der Ausgabe an einen Benutzer oder einen API-Konsumenten.
Ich empfehle Fractal als solide Grundlage für Ihre Ausgabetransformationsebene. Die Dokumentation können Sie hier lesen .
quelle
In Laravel 4 können Sie bestimmte Felder vor der Rückgabe verbergen, indem Sie Folgendes in Ihr Modell einfügen.
http://laravel.com/docs/eloquent#converting-to-arrays-or-json
quelle
Auf Laravel 5.5 ist dies am saubersten:
Sie fügen einen Doppelpunkt und die Felder, die Sie auswählen möchten, getrennt durch ein Komma und ohne Leerzeichen dazwischen hinzu.
quelle
Verwenden des Modells:
Verwenden des Abfrage-Generators:
quelle
Wenn ich das gut verstanden habe, ist das, was zurückgegeben wird, in Ordnung, außer dass Sie nur eine Spalte sehen möchten. Wenn ja, sollte dies unten viel einfacher sein:
quelle
Überprüfen Sie heraus, http://laravel.com/docs/database/eloquent#to-array
Sie sollten in der Lage sein zu definieren, welche Spalten in Ihrer API nicht angezeigt werden sollen.
quelle