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?

devnull Ψ
sumber
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();
Marcin Nabiałek
sumber
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']);
Utkarsh Pandey
sumber
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

Sivakumar Tadisetti
sumber
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.

Sammie
sumber
24

Juga Model::all(['id'])->toArray()hanya akan mengambil id sebagai array.

pengguna3888958
sumber
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();
Mahesh Yadav
sumber
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']);
aleXela
sumber
4

Anda juga dapat menggunakan memetik.

Model::where('id',1)->pluck('column1', 'column2');
bereket gebredingle
sumber
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

Mostafa Asadi
sumber
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.

Josh Rumbut
sumber
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']);
Haritsinh Gohil
sumber
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();  
Jitender Sharma
sumber
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.

Nikola Kirincic
sumber
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

Robert Pounder
sumber
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']);
Jignesh Joisar
sumber
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'];
Brane
sumber
0

Anda dapat menggunakan kueri di bawah ini:

Table('table')->select('name','surname')->where('id',1)->get();
Luis
sumber
1
Silakan tambahkan beberapa penjelasan untuk jawaban Anda sehingga orang lain dapat belajar darinya
Nico Haase
0

gunakan App \ Table; ... Table :: where ('id', 1) -> get ('name', 'marga');

jika tidak ada dimana

Tabel :: semua ('nama', 'nama keluarga');

عبد الناصر الخمايسة
sumber