powiedzmy, że mam 7 kolumn w tabeli i chcę wybrać tylko dwie z nich, coś takiego
SELECT `name`,`surname` FROM `table` WHERE `id` = '1';
W elokwentnym modelu laravel może to wyglądać tak
Table::where('id', 1)->get();
ale myślę, że to wyrażenie wybierze WSZYSTKIE kolumny, w których identyfikator jest równy 1, a chcę tylko dwie kolumny (imię, nazwisko). jak wybrać tylko dwie kolumny?
Odpowiedzi:
Możesz to zrobić w ten sposób:
Table::select('name','surname')->where('id', 1)->get();
źródło
SELECT name, surname FROM Table where id = 1
zapytanie SQLTable::where('id', 1)->get(['name','surname']);
źródło
Używając metody all () możemy wybrać poszczególne kolumny z tabeli, jak pokazano poniżej.
ModelName::all('column1', 'column2', 'column3');
Uwaga : Laravel 5.4
źródło
Możesz także użyć w
find()
ten sposób:ModelName::find($id, ['name', 'surname']);
$id
Zmienna może być tablicą w przypadku trzeba pobrać wiele wystąpień modelu.źródło
Ponadto
Model::all(['id'])->toArray()
pobierze tylko identyfikator jako tablicę.źródło
Najpierw musisz utworzyć model, który reprezentuje tę tabelę, a następnie użyj poniższego elokwentnego sposobu, aby pobrać dane tylko z 2 pól.
Model::where('id', 1) ->pluck('name', 'surname') ->all();
źródło
Możesz użyć get (), a także all ()
ModelName::where('a', 1)->get(['column1','column2']);
źródło
Uzyskaj wartość jednej kolumny:
możesz użyć tej metody z klauzulą where:
Table_Name::where('id',$id)->first()->column_name;
lub użyj tej metody, aby ominąć PhpStorm „Metoda nie została znaleziona w App \ Models”:
Table_Name::query()->where('id','=',$id)->first()->column_name;
w konstruktorze zapytań:
DB::table('table_names')->find($id)->column_name;
z gdzie cluase:
DB::table('table_names')->where('id',$id)->first()->column_name;
lub
DB::table('table_names')->where('id',$id)->first('column_name');
ostatnim wynikiem metody jest tablica
źródło
Możesz także użyć zrywki.
Model::where('id',1)->pluck('column1', 'column2');
źródło
pluck()
jest to mniej wydajne niż inne omówione metody, ponieważ nie modyfikujeSELECT ...
zapytania, ale raczej działa na już zwróconym zestawie wyników.Z laravel 5.3 tylko przy użyciu
get()
metody można uzyskać określone kolumny tabeli:YouModelName::get(['id', 'name']);
Lub z laravel 5.4 możesz również użyć
all()
metody na zdobycie wybranych pól:YourModelName::all('id', 'name');
z obydwoma powyższymi metodami
get()
luball()
możesz również użyć,where()
ale składnia jest inna dla obu:Model :: all ()
YourModelName::all('id', 'name')->where('id',1);
Model :: get ()
YourModelName::where('id',1)->get(['id', 'name']);
źródło
Aby otrzymać wynik konkretnej kolumny z tabeli, musimy podać nazwę kolumny.
Użyj następującego kodu: -
$result = DB::Table('table_name')->select('column1','column2')->where('id',1)->get();
na przykład -
$result = DB::Table('Student')->select('subject','class')->where('id',1)->get();
źródło
Możesz użyć
Table::select ('name', 'surname')->where ('id', 1)->get ()
.Pamiętaj, że wybierając tylko dla niektórych pól, będziesz musiał wykonać kolejne zapytanie, jeśli w końcu uzyskasz dostęp do tych innych pól później w żądaniu (co może być oczywiste, po prostu chciałem uwzględnić to zastrzeżenie). Uwzględnienie pola id jest zazwyczaj dobrym pomysłem, więc laravel wie, jak odpisać wszelkie aktualizacje, które wykonujesz w instancji modelu.
źródło
use App\Table; // ... Table::where('id',1)->get('name','surname');
jeśli nie, gdzie
Table::all('name','surname');
źródło
Możesz również użyć
findOrFail()
tutaj metody, którą dobrze jest zastosowaćModelName::findOrFail($id, ['firstName', 'lastName']);
źródło
Chociaż najbardziej powszechnym podejściem jest użycie
Model::select
, może spowodować renderowanie wszystkich atrybutów zdefiniowanych za pomocą metod akcesorów w klasach modelu. Jeśli więc zdefiniujesz atrybut w swoim modelu:<?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); } }
A następnie użyj:
TableName::select('username')->where('id', 1)->get();
Wyprowadzi kolekcję z zarówno nazwą użytkownika, jak
first_name
iusername
, a nie tylko.Lepsze użycie
pluck()
, solo lub opcjonalnie w połączeniu zselect
- jeśli chcesz mieć określone kolumny.TableName::select('username')->where('id', 1)->pluck('username');
lub
TableName::where('id', 1)->pluck('username');
// co zwróci kolekcję składającą się tylko zusername
wartościOpcjonalnie użyj również
->toArray()
do konwersji obiektu kolekcji na tablicę.źródło
->get()
podobnie jak->all()
(i->first()
itp.) może przyjmować pola, które chcesz przywrócić jako parametry;->get/all(['column1','column2'])
Przywróciłby kolekcję, ale tylko z
column1
icolumn2
źródło
Jeśli chcesz uzyskać pojedynczy wiersz, a z tego wiersza jedną kolumnę, jeden kod linii, aby uzyskać wartość określonej kolumny, to użycie
find()
metody obok określenia kolumny, którą chcesz pobrać.Oto przykładowy kod:
ModelName::find($id_of_the_record, ['column_name'])->toArray()['column_name'];
źródło
Możesz użyć poniższego zapytania:
Table('table')->select('name','surname')->where('id',1)->get();
źródło
ModelName :: find ($ id, ['imię', 'nazwisko']);
źródło