Saya punya 2 tabel bergabung di Eloquent yaitu tema dan pengguna.
model tema:
public function user() {
return $this->belongs_to('User');
}
model pengguna:
public function themes() {
return $this->has_many('Theme');
}
Panggilan api Eloquent saya terlihat seperti di bawah ini:
return Response::eloquent(Theme::with('user')->get());
Yang mengembalikan semua kolom dari tema (tidak apa-apa), dan semua kolom dari pengguna (tidak baik). Saya hanya memerlukan kolom 'nama pengguna' dari model pengguna, bagaimana cara membatasi kueri untuk itu?
Response
jenis kelas yang perlu saya impor?Jawaban:
Ubah model Anda untuk menentukan kolom apa yang ingin Anda pilih:
Dan jangan lupa untuk memasukkan kolom tempat Anda bergabung.
sumber
Untuk Laravel> = 5.2
Gunakan -> memetik () metode
Untuk Laravel <= 5.1
Gunakan -> daftar () metode
sumber
Anda dapat menyediakan larik bidang dalam parameter get seperti:
UPDATE (untuk Laravel 5.2) Dari dokumen , Anda dapat melakukan ini:
sumber
SQLSTATE[42S22]: Column not found
dan SQL tidak menyertakan tabel diwith
. Sql yang muncul pada kesalahan adalah "SELECT fk_table.column1 FROM main_table".Saya tahu, Anda meminta Eloquent tetapi Anda dapat melakukannya dengan Fluent Query Builder
sumber
Beginilah cara saya melakukannya
Jawaban pertama oleh user2317976 tidak berfungsi untuk saya, saya menggunakan laravel 5.1
sumber
pivot
ke $ array tersembunyi Model Posprotected $hidden = ['pivot']
Opsi lainnya adalah menggunakan
$hidden
properti pada model untuk menyembunyikan kolom yang tidak ingin Anda tampilkan. Anda dapat menentukan properti ini dengan cepat atau menyetel default pada model Anda.Sekarang kata sandi pengguna akan disembunyikan ketika Anda mengembalikan respons JSON.
Anda juga dapat mengaturnya dengan cepat dengan cara yang sama.
sumber
static
.Menggunakan dengan pagination
sumber
user2317976 telah memperkenalkan cara statis yang bagus untuk memilih kolom tabel terkait.
Berikut ini trik dinamis yang saya temukan sehingga Anda bisa mendapatkan apa pun yang Anda inginkan saat menggunakan model:
Saya baru saja menemukan trik ini juga bekerja dengan baik dengan load () juga. Ini sangat nyaman.
Pastikan Anda juga menyertakan kunci tabel target jika tidak maka tidak akan dapat menemukannya.
sumber
Cara ini:
sumber
Saya tahu bahwa ini adalah pertanyaan lama, tetapi jika Anda membangun API, seperti yang dilakukan oleh penulis pertanyaan, gunakan transformator keluaran untuk melakukan tugas-tugas tersebut.
Transofrmer adalah lapisan antara hasil kueri database Anda yang sebenarnya dan pengontrol. Ini memungkinkan untuk dengan mudah mengontrol dan memodifikasi apa yang akan menjadi output bagi pengguna atau konsumen API.
Saya merekomendasikan Fractal sebagai dasar yang kuat dari lapisan transformasi keluaran Anda. Anda bisa membaca dokumentasinya di sini .
sumber
Di Laravel 4 Anda dapat menyembunyikan bidang tertentu agar tidak dikembalikan dengan menambahkan berikut ini dalam model Anda.
http://laravel.com/docs/eloquent#converting-to-arrays-or-json
sumber
Di Laravel 5.5, cara terbersih untuk melakukannya adalah:
Anda menambahkan titik dua dan bidang yang ingin Anda pilih dipisahkan dengan koma dan tanpa spasi di antaranya.
sumber
Menggunakan Model:
Menggunakan Query Builder:
sumber
Jika saya mengerti dengan baik ini apa yang dikembalikan baik-baik saja kecuali Anda hanya ingin melihat satu kolom. Jika demikian, di bawah ini seharusnya jauh lebih sederhana:
sumber
Lihat, http://laravel.com/docs/database/eloquent#to-array
Anda harus dapat menentukan kolom mana yang tidak ingin Anda tampilkan di api Anda.
sumber