Cara memilih kolom tertentu dalam laravel fasih


138

katakanlah saya memiliki 7 kolom dalam tabel, dan saya ingin memilih hanya dua kolom, kira-kira seperti ini

SELECT `name`,`surname` FROM `table` WHERE `id` = '1';

Dalam model fasih laravel mungkin terlihat seperti ini

Table::where('id', 1)->get();

tapi saya kira ungkapan ini akan memilih SEMUA kolom di mana id sama dengan 1, dan saya hanya ingin dua kolom (nama, nama keluarga). bagaimana cara memilih hanya dua kolom?


Terima kasih telah mengajukan pertanyaan. Ini gila karena saya selalu melakukan ini dengan benar dalam query SQL 'klasik', tetapi harus menggunakan Eloquent, saya merasa sangat membingungkan saya senang hanya membuatnya bekerja, dan tidak menyadari berapa banyak memori yang digunakan pertanyaan saya karena saya sedang memilih segalanya.
Jonny Perl

Jawaban:


224

Anda dapat melakukannya seperti ini:

Table::select('name','surname')->where('id', 1)->get();

1
mari kita anggap saya ingin memilih setiap bidang berharap satu bagaimana saya bisa melakukan itu
Pangeran Arora

1
Pertama-tama, ketika Anda memiliki pertanyaan, tanyakan satu. Dan untuk kasus Anda - sebutkan saja semua kolom alih-alih kolom yang tidak ingin Anda sertakan. Sangat mudah.
Marcin Nabiałek

2
tidak ada metode lain untuk melakukan itu tanpa menyebutkan semua kolom
Pangeran Arora

1
Ini berfungsi untuk kasus dasar dengan satu tabel. Namun, jika Anda menggunakan relasi di atas tabel pivot, maka ini juga akan memilih kolom pivot, secara otomatis.
Benubird

1
@OPV Ini hanya menjalankan SELECT name, surname FROM Table where id = 1query SQL
Marcin Nabiałek

67
Table::where('id', 1)->get(['name','surname']);

Saya menginginkan hal yang sama tetapi menggunakan metode yang berbeda. Saya ingin memilih metode dengan membuat contoh model dan kemudian pilih kolom. yaitu $ model = new MyModel (); $ model-> select (['col1', 'col2']); Tapi benda ini tidak berfungsi
Dhirender

49

Dengan menggunakan semua () metode kita dapat memilih kolom tertentu dari tabel seperti yang ditunjukkan di bawah ini.

ModelName::all('column1', 'column2', 'column3');

Catatan : Laravel 5.4


Saya menginginkan hal yang sama tetapi menggunakan metode yang berbeda. Saya ingin memilih metode dengan membuat contoh model dan kemudian pilih kolom. yaitu $ model = new MyModel (); $ model-> select (['col1', 'col2']); Tetapi hal ini tidak berhasil.
Dhirender

37

Anda juga dapat menggunakan find()seperti ini:

ModelName::find($id, ['name', 'surname']);

The $idvariabel dapat berupa array dalam kasus Anda perlu untuk mengambil beberapa contoh dari model.



17

Pertama-tama Anda perlu membuat Model, yang mewakili Tabel itu dan kemudian menggunakan cara Eloquent di bawah ini untuk mengambil data hanya 2 bidang.

Model::where('id', 1)
         ->pluck('name', 'surname')
         ->all();

Ini adalah jawaban terbaik karena ini berfungsi juga dengan tabel pivot dalam banyak hubungan.
Luciano Fantuzzi

8

Anda dapat menggunakan get () dan juga semua ()

ModelName::where('a', 1)->get(['column1','column2']);

4

Anda juga dapat menggunakan memetik.

Model::where('id',1)->pluck('column1', 'column2');

6
Catatan yang pluck()kurang efisien daripada metode lain yang dibahas karena tidak mengubah SELECT ...kueri, melainkan beroperasi pada set hasil yang sudah dikembalikan.
Ben Johnson

4

Dapatkan nilai satu kolom:

Table_Name::find($id)->column_name;

Bahkan Anda dapat menggunakan metode ini dengan klausa mana:

Table_Name::where('id',$id)->first()->column_name;

dalam pembuat kueri:

DB::table('table_names')->find($id)->column_name;

dengan mana cluase:

DB::table('table_names')->where('id',$id)->first()->column_name;

atau

DB::table('table_names')->where('id',$id)->first('column_name');

hasil metode terakhir adalah array


3

Kamu bisa memakai Table::select ('name', 'surname')->where ('id', 1)->get () .

Ingatlah bahwa ketika memilih hanya bidang tertentu, Anda harus membuat kueri lain jika Anda akhirnya mengakses bidang lain itu di permintaan (yang mungkin jelas, hanya ingin menyertakan peringatan itu). Memasukkan bidang id biasanya merupakan ide bagus sehingga laravel tahu cara menulis kembali setiap pembaruan yang Anda lakukan pada contoh model.


3

Dari laravel 5.3 hanya menggunakan get()metode, Anda bisa mendapatkan kolom tertentu dari tabel Anda:

YouModelName::get(['id', 'name']);

Atau dari laravel 5.4 Anda juga dapat menggunakan all()metode untuk mendapatkan bidang pilihan Anda:

YourModelName::all('id', 'name');

dengan kedua metode di atas get()atau all()Anda juga dapat menggunakan where()tetapi sintaksnya berbeda untuk keduanya:

Model :: all ()

YourModelName::all('id', 'name')->where('id',1);

Model :: get ()

YourModelName::where('id',1)->get(['id', 'name']);

3

Untuk mendapatkan hasil kolom tertentu dari tabel, kita harus menentukan nama kolom.

Gunakan kode berikut: -

   $result = DB::Table('table_name')->select('column1','column2')->where('id',1)->get();  

sebagai contoh -

$result = DB::Table('Student')->select('subject','class')->where('id',1)->get();  

Silakan tambahkan beberapa penjelasan untuk jawaban Anda sehingga orang lain dapat belajar darinya
Nico Haase

2

Sementara pendekatan yang paling umum adalah untuk digunakan Model::select, itu dapat menyebabkan render semua atribut yang didefinisikan dengan metode accessor dalam kelas model. Jadi, jika Anda mendefinisikan atribut dalam model Anda:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class User extends Model
{
    /**
     * Get the user's first name.
     *
     * @param  string  $value
     * @return string
     */
    public function getFirstNameAttribute($value)
    {
        return ucfirst($value);
    }
}

Dan kemudian gunakan: TableName::select('username')->where('id', 1)->get();

Ini akan menampilkan koleksi dengan keduanya first_namedan username, bukan hanya nama pengguna.

Lebih baik digunakan pluck(), solo atau secara opsional dikombinasikan dengan select- jika Anda menginginkan kolom tertentu.

TableName::select('username')->where('id', 1)->pluck('username');

atau

TableName::where('id', 1)->pluck('username'); // itu akan mengembalikan koleksi yang hanya terdiri dari usernamenilai

Juga, secara opsional, gunakan ->toArray()untuk mengubah objek koleksi menjadi array.


1

->get()seperti ->all()(dan ->first()sebagainya.) dapat mengambil bidang yang ingin Anda bawa kembali sebagai parameter;

->get/all(['column1','column2'])

Akan membawa kembali koleksi tetapi hanya dengan column1dancolumn2


1

Anda juga dapat menggunakan findOrFail()metode di sini. Itu baik untuk digunakan

jika pengecualian tidak tertangkap, respons HTTP 404 secara otomatis dikirim kembali ke pengguna. Tidak perlu menulis cek eksplisit untuk mengembalikan 404 tanggapan saat menggunakan metode ini tidak memberikan kesalahan 500 ..

ModelName::findOrFail($id, ['firstName', 'lastName']);

1

Jika Anda ingin mendapatkan baris tunggal dan dari kolom tunggal baris itu, satu kode baris untuk mendapatkan nilai kolom tertentu adalah dengan menggunakan find() metode di samping menentukan kolom yang ingin Anda ambil.

Berikut ini contoh kode:

ModelName::find($id_of_the_record, ['column_name'])->toArray()['column_name'];

0

Anda dapat menggunakan kueri di bawah ini:

Table('table')->select('name','surname')->where('id',1)->get();

1
Silakan tambahkan beberapa penjelasan untuk jawaban Anda sehingga orang lain dapat belajar darinya
Nico Haase

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.