So wählen Sie bestimmte Spalten in Laravel eloquent aus


137

Nehmen wir an, ich habe 7 Spalten in der Tabelle und möchte nur zwei davon auswählen

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

Im eloquenten Laravel-Modell sieht es möglicherweise so aus

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

Aber ich denke, dieser Ausdruck wählt ALLE Spalten aus, wobei id gleich 1 ist, und ich möchte nur zwei Spalten (Name, Nachname). Wie wähle ich nur zwei Spalten aus?


Danke, dass Sie die Frage gestellt haben. Es ist verrückt, da ich dies in "klassischen" SQL-Abfragen immer richtig gemacht habe, aber als ich Eloquent verwenden musste, fand ich es so verwirrend, dass ich froh war, es zum Laufen zu bringen, und nicht wusste, wie viel Speicher meine Abfragen verwendeten, weil ich wählte alles aus.
Jonny Perl

Antworten:


220

Sie können es so machen:

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

1
Nehmen wir an, ich möchte jedes Feld auswählen. Erwarten Sie eines. Wie kann ich das tun
?

1
Wenn Sie eine Frage haben, stellen Sie zunächst eine. Und für Ihren Fall - erwähnen Sie einfach alle Spalten anstelle der Spalten, die Sie nicht einschließen möchten. So einfach ist das.
Marcin Nabiałek

2
Gibt es keine andere Methode, um dies zu tun, ohne alle Spalten zu erwähnen
Prinz Arora

1
Dies funktioniert für einen Basisfall mit einer einzelnen Tabelle. Wenn Sie jedoch eine Beziehung über einer Pivot-Tabelle verwenden, werden dadurch AUCH automatisch die Pivot-Spalten ausgewählt.
Benubird

1
@OPV Es läuft nur SELECT name, surname FROM Table where id = 1SQL-Abfrage
Marcin Nabiałek

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

Ich möchte dasselbe, aber mit einer anderen Methode. Ich möchte die Methode auswählen, indem ich eine Instanz des Modells erstelle und dann die Spalte auswähle. dh $ model = new MyModel (); $ model-> select (['col1', 'col2']); Aber dieses Ding funktioniert nicht
Dhirender

49

Mit der all () -Methode können wir bestimmte Spalten aus der Tabelle auswählen, wie unten gezeigt.

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

Hinweis : Laravel 5.4


Ich möchte dasselbe, aber mit einer anderen Methode. Ich möchte die Methode auswählen, indem ich eine Instanz des Modells erstelle und dann die Spalte auswähle. dh $ model = new MyModel (); $ model-> select (['col1', 'col2']); Aber das Ding funktioniert nicht.
Dhirender

37

Sie können auch find()wie folgt verwenden:

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

Die $idVariable kann ein Array sein, falls Sie mehrere Instanzen des Modells abrufen müssen.


24

Außerdem Model::all(['id'])->toArray()wird nur die ID als Array abgerufen.


17

Sie müssen zuerst ein Modell erstellen, das diese Tabelle darstellt, und dann die folgende eloquente Methode verwenden, um die Daten von nur 2 Feldern abzurufen.

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

Dies ist die beste Antwort, da sie auch mit Pivot-Tabellen in vielen bis vielen Beziehungen funktioniert.
Luciano Fantuzzi

8

Sie können sowohl get () als auch all () verwenden.

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

4

Sie können auch Zupfen verwenden.

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

6
Beachten Sie, dass dies pluck()weniger effizient ist als die anderen beschriebenen Methoden, da die SELECT ...Abfrage nicht geändert wird , sondern die bereits zurückgegebene Ergebnismenge verarbeitet wird.
Ben Johnson

4

Wert einer Spalte abrufen:

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

Auch Sie können diese Methode mit der where-Klausel verwenden:

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

im Abfrage-Generator:

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

mit wo cluase:

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

oder

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

Das letzte Methodenergebnis ist ein Array


3

Sie können verwenden Table::select ('name', 'surname')->where ('id', 1)->get ().

Beachten Sie, dass Sie bei der Auswahl nur für bestimmte Felder eine weitere Abfrage durchführen müssen, wenn Sie später in der Anforderung auf diese anderen Felder zugreifen (dies kann offensichtlich sein und wollte nur diesen Vorbehalt einschließen). Das Einfügen des ID-Felds ist normalerweise eine gute Idee, damit Laravel weiß, wie alle Aktualisierungen, die Sie an der Modellinstanz vornehmen, zurückgeschrieben werden.


3

Ab Laravel 5.3 können Sie nur mit der get()Methode bestimmte Spalten Ihrer Tabelle abrufen :

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

Oder ab Laravel 5.4 können Sie auch die all()Methode verwenden, um die Felder Ihrer Wahl abzurufen :

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

mit beiden oben genannten Methoden get()oder all()Sie können auch verwenden, where()aber die Syntax ist für beide unterschiedlich:

Model :: all ()

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

Model :: get ()

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

3

Um das Ergebnis einer bestimmten Spalte aus der Tabelle zu erhalten, müssen wir den Spaltennamen angeben.

Verwenden Sie folgenden Code: -

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

zum Beispiel -

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

Bitte fügen Sie Ihrer Antwort eine Erklärung hinzu, damit andere daraus lernen können
Nico Haase

2

Während der häufigste Ansatz die Verwendung ist Model::select, kann dies dazu führen, dass alle mit Accessor-Methoden definierten Attribute in Modellklassen gerendert werden. Wenn Sie also ein Attribut in Ihrem Modell definieren:

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

Und dann benutze: TableName::select('username')->where('id', 1)->get();

Die Sammlung wird mit beiden first_nameund usernamenicht nur mit dem Benutzernamen ausgegeben .

Besser verwenden pluck(), solo oder optional in Kombination mit select- wenn Sie bestimmte Spalten möchten.

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

oder

TableName::where('id', 1)->pluck('username'); // das würde eine Sammlung zurückgeben, die nur aus usernameWerten besteht

Optional können Sie auch ->toArray()das Sammlungsobjekt in ein Array konvertieren.


1

->get()Ähnlich wie ->all()(und ->first()etc ..) können die Felder, die Sie zurückbringen möchten, als Parameter verwendet werden.

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

Würde die Sammlung aber nur mit column1und zurückbringencolumn2


1

Sie können hier auch die findOrFail()Methode verwenden , die gut zu verwenden ist

Wenn die Ausnahme nicht abgefangen wird, wird automatisch eine 404-HTTP-Antwort an den Benutzer zurückgesendet. Es ist nicht erforderlich, explizite Überprüfungen zu schreiben, um 404 Antworten zurückzugeben, wenn diese Methode keinen 500-Fehler ergibt.

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

1

Wenn Sie eine einzelne Zeile und aus dieser einzelnen Spalte eine Zeile find()abrufen möchten, verwenden Sie einen Zeilencode, um den Wert der bestimmten Spalte abzurufen , die Methode neben der Angabe der Spalte, die Sie abrufen möchten.

Hier ist Beispielcode:

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

0

Sie können die folgende Abfrage verwenden:

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

1
Bitte fügen Sie Ihrer Antwort eine Erklärung hinzu, damit andere daraus lernen können
Nico Haase

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.