Apabila memanfaatkan fungsi "with()" dalam ORM Eloquent Laravel untuk mengambil data berkaitan daripada berbilang jadual, anda mungkin menghadapi situasi di mana anda hanya memerlukan lajur tertentu daripada jadual kedua. Artikel ini menyelidiki cara untuk mencapai perkara ini tanpa menggunakan Pembina Pertanyaan.
Pertimbangkan senario di mana anda mempunyai dua jadual, "Pengguna" dan "Siaran," dengan perhubungan satu-ke-banyak antara mereka. Dalam model Pengguna anda, anda mentakrifkan hubungan "hasMany" dengan model Post:
public function post() { return $this->hasmany('post'); }
Begitu juga, dalam model Post, anda mewujudkan hubungan "belongsTo" dengan model Pengguna:
public function user() { return $this->belongsTo('user'); }
Walau bagaimanapun, apabila anda menggunakan fungsi "with()" untuk menyertai kedua-dua jadual ini, anda mungkin perasan bahawa ia memilih semua lajur daripada jadual kedua secara lalai. Katakan anda hanya mahu mendapatkan semula lajur tertentu, seperti "id" dan "nama pengguna," daripada jadual "Pengguna". Coretan kod berikut tidak akan mencukupi:
Post::query() ->with('user') ->get();
Untuk mencapai matlamat anda, anda boleh lulus fungsi penutupan sebagai indeks kedua tatasusunan dihantar ke fungsi "with()":
Post::query() ->with(['user' => function ($query) { $query->select('id', 'username'); }]) ->get()
Penutupan ini membolehkan anda menentukan lajur yang hendak diambil daripada jadual kedua. Dalam keadaan ini, ia hanya akan memilih lajur "id" dan "nama pengguna" daripada jadual "Pengguna".
Nota: Seperti yang dinyatakan dalam jawapan, kunci utama ("id " dalam kes ini) mestilah parameter pertama dalam kaedah $query->select() untuk memastikan perolehan hasil yang betul.
Atas ialah kandungan terperinci Bagaimana untuk Memilih Lajur Khusus dalam Fungsi Laravel's Fasih `dengan()`?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!