Mam 2 połączone tabele w Eloquent, a mianowicie motywy i użytkowników.
model motywu:
public function user() {
return $this->belongs_to('User');
}
model użytkownika:
public function themes() {
return $this->has_many('Theme');
}
Moje wywołanie Eloquent API wygląda jak poniżej:
return Response::eloquent(Theme::with('user')->get());
Co zwraca wszystkie kolumny z motywu (to dobrze) i wszystkie kolumny od użytkownika (nie w porządku). Potrzebuję tylko kolumny „nazwa użytkownika” z modelu użytkownika, jak mogę ograniczyć zapytanie do tego?
Response
jakiej klasy muszę zaimportować?Odpowiedzi:
Zmień model, aby określić, które kolumny chcesz wybrać:
I nie zapomnij dołączyć kolumny, do której się przyłączasz.
źródło
Dla Laravel> = 5,2
Używać -> zrywać) ( metoda
Dla Laravel <= 5,1
Użyj -> list () metoda
źródło
Możesz podać tablicę pól w parametrze get w następujący sposób:
AKTUALIZACJA (dla Laravel 5.2) Z poziomu dokumentacji możesz to zrobić:
źródło
SQLSTATE[42S22]: Column not found
a jego SQL nie zawiera tabeli wwith
. SQL, który pojawia się w błędzie to „SELECT fk_table.column1 FROM main_table”.Wiem, prosisz o Eloquent, ale możesz to zrobić za pomocą Fluent Query Builder
źródło
Tak to robię
Pierwsza odpowiedź użytkownika2317976 nie działa dla mnie, używam laravel 5.1
źródło
pivot
do $ ukrytej tablicy Post Modelprotected $hidden = ['pivot']
Inną opcją jest użycie
$hidden
właściwości modelu w celu ukrycia kolumn, których nie chcesz wyświetlać. Możesz zdefiniować tę właściwość w locie lub ustawić wartości domyślne w modelu.Teraz hasło użytkownika zostanie ukryte, gdy zwrócisz odpowiedź JSON.
Możesz również ustawić go w locie w podobny sposób.
źródło
static
.Używanie z paginacją
źródło
user2317976 wprowadził wspaniały statyczny sposób wybierania kolumn powiązanych tabel.
Oto dynamiczna sztuczka, którą znalazłem, dzięki której możesz uzyskać wszystko, co chcesz, używając modelu:
Właśnie odkryłem, że ta sztuczka działa również dobrze z load (). To bardzo wygodne.
Upewnij się, że dołączasz również klucz tabeli docelowej, w przeciwnym razie nie będzie w stanie go znaleźć.
źródło
Tą drogą:
źródło
Wiem, że to stare pytanie, ale jeśli budujesz API, tak jak robi to autor pytania, użyj transformatorów wyjściowych do wykonywania takich zadań.
Transofrmer to warstwa między rzeczywistym wynikiem zapytania w bazie danych a kontrolerem. Pozwala w łatwy sposób kontrolować i modyfikować to, co ma być wyprowadzane dla użytkownika lub konsumenta API.
Polecam Fractal jako solidną podstawę twojej wyjściowej warstwy transformacji. Możesz przeczytać dokumentację tutaj .
źródło
W Laravel 4 możesz ukryć niektóre pola przed zwróceniem, dodając następujące elementy w swoim modelu.
http://laravel.com/docs/eloquent#converting-to-arrays-or-json
źródło
W Laravel 5.5 najczystszym sposobem na to jest:
Dodajesz dwukropek i pola, które chcesz wybrać, oddzielone przecinkiem i bez spacji między nimi.
źródło
Korzystanie z modelu:
Korzystanie z Query Builder:
źródło
Jeśli dobrze to zrozumiałem, to, co jest zwracane, jest w porządku, chyba że chcesz zobaczyć tylko jedną kolumnę. Jeśli tak, to poniżej powinno być znacznie prostsze:
źródło
Sprawdź, http://laravel.com/docs/database/eloquent#to-array
Powinieneś być w stanie zdefiniować, które kolumny nie mają być wyświetlane w Twoim interfejsie API.
źródło