Laravel belgesindeki belirli sütunlar nasıl seçilir


138

diyelim ki tabloda 7 sütunum var ve bunlardan sadece ikisini seçmek istiyorum, bunun gibi bir şey

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

Laravel anlamlı modelde şöyle görünebilir:

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

ama sanırım bu ifade id'nin 1'e eşit olduğu TÜM sütunları seçecek ve sadece iki sütun istiyorum (ad, soyad). sadece iki sütun nasıl seçilir?


Soruyu sorduğunuz için teşekkürler. Bunu 'klasik' SQL sorgularında her zaman doğru bir şekilde yaptığım için çılgınca, ancak Eloquent kullanmak zorunda kaldım, o kadar kafa karıştırıcı buldum ki, onu çalıştırdığım için mutluydum ve sorgularımın ne kadar bellek kullandığını bilmiyordum çünkü her şeyi seçiyordu.
Jonny Perl

Yanıtlar:


225

Bunu şu şekilde yapabilirsiniz:

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

1
farz edelim ki her alanı seçmek istiyorum, bir tane bekleyin bunu nasıl yapabilirim
Prince Arora

2
Öncelikle soru sorduğunuzda bir tane sorun. Ve sizin durumunuz için - sadece dahil etmek istemediğiniz sütunların yerine tüm sütunlardan bahsedin. İşte bu kadar kolay.
Marcin Nabiałek

2
tüm sütunlardan bahsetmeden bunu yapmanın başka bir yöntemi yok mu
Prens Arora

1
Bu, tek bir tablo içeren temel bir durum için işe yarar. Bununla birlikte, bir pivot tablo üzerinde bir ilişki kullanıyorsanız, bu AYRICA, pivot sütunlarını otomatik olarak seçecektir.
Benubird

1
@OPV Sadece SELECT name, surname FROM Table where id = 1SQL sorgusu çalıştırıyor
Marcin Nabiałek

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

Aynı şeyi istiyorum ama farklı bir yöntem kullanıyorum. Model örneğini oluşturarak yöntem seçmek ve ardından sütun seçmek istiyorum. yani $ model = yeni MyModel (); $ model-> select (['col1', 'col2']); Ama bu şey çalışmıyor
Dhirender

49

All () yöntemini kullanarak, aşağıda gösterildiği gibi tablodan belirli sütunları seçebiliriz.

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

Not : Laravel 5.4


Aynı şeyi istiyorum ama farklı bir yöntem kullanıyorum. Model örneğini oluşturarak yöntem seçmek ve ardından sütun seçmek istiyorum. yani $ model = yeni MyModel (); $ model-> select (['col1', 'col2']); Ama bu şey çalışmıyor.
Dhirender

37

Ayrıca şu şekilde kullanabilirsiniz find():

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

$idDeğişken modelin birden çok örneğini almak gerekir durumunda bir dizi olabilir.


24

Ayrıca Model::all(['id'])->toArray()id sadece dizi olarak getirecektir.


17

Önce bu Tabloyu temsil eden bir Model oluşturmanız ve ardından yalnızca 2 alanın verilerini almak için aşağıdaki Eloquent yolunu kullanmanız gerekir.

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

Pek çok ilişkide pivot tablolarla da çalıştığı için bu en iyi yanıttır.
Luciano Fantuzzi

8

All () ile birlikte get () kullanabilirsiniz

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

4

Ayrıca yolma kullanabilirsiniz.

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

6
Sorguyu pluck()değiştirmediği SELECT ..., bunun yerine önceden döndürülen sonuç kümesi üzerinde çalıştığı için tartışılan diğer yöntemlerden daha az verimli olduğunu unutmayın .
Ben Johnson

4

Bir sütunun değerini alın:

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

Bu yöntemi nerede cümlesiyle bile kullanabilirsiniz:

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

sorgu oluşturucuda:

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

ipucu ile:

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

veya

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

son yöntem sonucu dizi


3

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

Yalnızca belirli alanlar için seçim yaparken, istekte daha sonra bu diğer alanlara erişirseniz başka bir sorgu yapmanız gerekeceğini unutmayın (bu açık olabilir, sadece bu uyarıyı eklemek istedim). Kimlik alanını dahil etmek genellikle iyi bir fikirdir, bu nedenle laravel model örneğine yaptığınız güncellemeleri nasıl geri yazacağını bilir.


3

Laravel 5.3'ten yalnızca get()yöntemi kullanarak tablonuzun belirli sütunlarını alabilirsiniz:

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

Veya laravel 5.4'ten seçtiğiniz all()alanları elde etmek için yöntemi de kullanabilirsiniz :

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

Yukarıdaki yöntemin her ikisi ile get()ya all()da kullanabilirsiniz where()ancak sözdizimi her ikisi için farklıdır:

Model :: hepsi ()

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

Model :: get ()

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

3

Tablodan belirli bir sütunun sonucunu almak için sütun adını belirtmemiz gerekir.

Aşağıdaki kodu kullanın: -

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

Örneğin -

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

Lütfen cevabınıza başkalarının da öğrenebileceği bir açıklama ekleyin
Nico Haase

2

En yaygın yaklaşım kullanmak Model::selectolsa da, model sınıfları içinde erişimci yöntemleriyle tanımlanan tüm özniteliklerin oluşturulmasına neden olabilir. Dolayısıyla, modelinizde öznitelik tanımlarsanız:

<?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);
    }
}

Ve sonra şunu kullanın: TableName::select('username')->where('id', 1)->get();

Koleksiyonu yalnızca kullanıcı adı yerine hem first_nameve ile usernameçıkarır.

Daha iyi kullanım pluck(), tek başına veya isteğe bağlı olarak select- belirli sütunlar istiyorsanız.

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

veya

TableName::where('id', 1)->pluck('username'); // sadece usernamedeğerlerden oluşan koleksiyonu döndürür

Ayrıca, isteğe bağlı olarak, ->toArray()koleksiyon nesnesini diziye dönüştürmek için kullanın .


1

->get()çok benzer ->all()(ve ->first()vb ..) geri getirmek istediğiniz alanları parametre olarak alabilir;

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

Koleksiyonu geri getirecekti ama sadece column1ve ilecolumn2


1

Ayrıca findOrFail()burada yöntemi de kullanabilirsiniz, kullanılması iyidir

istisna yakalanmazsa, kullanıcıya otomatik olarak 404 HTTP yanıtı gönderilir. Bu yöntemi kullanırken bir 500 hatası vermediğinde 404 yanıtlarını döndürmek için açık kontroller yazmak gerekli değildir.

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

1

Tek satır ve bu satırdan tek sütundan almak istiyorsanız, belirli bir sütunun değerini almak için bir satır kodu, find()onu geri almak istediğiniz sütunu belirtmenin yanı sıra yöntemi kullanmaktır .

İşte örnek kod:

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

0

Aşağıdaki sorguyu kullanabilirsiniz:

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

1
Lütfen cevabınıza başkalarının da öğrenebileceği bir açıklama ekleyin
Nico Haase

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.