web-dev-qa-db-fra.com

comment sélectionner des colonnes spécifiques dans laravel éloquent

disons que j'ai 7 colonnes dans la table, et je veux n'en sélectionner que deux, quelque chose comme ça

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

Dans le modèle éloquent de laravel, cela peut ressembler à ceci

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

mais je suppose que cette expression sélectionnera TOUTES les colonnes où id est égal à 1 et que je ne veux que deux colonnes (nom, prénom). Comment ne sélectionner que deux colonnes?

57
devnull Ψ

Vous pouvez le faire comme ça:

Table::select('name','surname')->where('id', 1)->get();
120
Marcin Nabiałek
Table::where('id', 1)->get(['name','surname']);
34
Utkarsh Pandey

En utilisant la méthode all (), nous pouvons sélectionner des colonnes particulières dans un tableau, comme indiqué ci-dessous.

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

Note : Laravel 5.4

21

De plus, Model::all(['id'])->toArray() ne récupérera l’identifiant que sous forme de tableau. 

10
user3888958

Vous devez d’abord créer un modèle, qui représente cette table, puis utiliser la méthode Eloquent ci-dessous pour extraire les données de deux champs seulement.

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

Vous pouvez également utiliser find() comme ceci:

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

La variable $id peut être un tableau au cas où vous auriez besoin de récupérer plusieurs instances du modèle.

7
Sammie

Vous pouvez utiliser get () ainsi que all ()

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

Utilisez le code suivant: - 

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

Bien que l'approche la plus courante consiste à utiliser Model::select, cela peut entraîner le rendu de tous les attributs définis avec des méthodes d'accès dans les classes de modèle. Donc, si vous définissez attribut dans votre modèle:

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

Et ensuite, utilisez: TableName::select('username')->where('id', 1)->get();

Il va sortir une collection avec first_name et username, plutôt que seulement un nom d'utilisateur.

Mieux vaut utiliser pluck(), en solo ou éventuellement en combinaison avec select - si vous souhaitez des colonnes spécifiques.

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

ou

TableName::where('id', 1)->pluck('username'); // qui renverrait une collection composée uniquement de username valeurs

Vous pouvez également utiliser ->toArray() pour convertir un objet de collection en tableau.

2
niklaz

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

N'oubliez pas que lors de la sélection de certains champs uniquement, vous devrez effectuer une autre requête si vous souhaitez accéder à ces autres champs ultérieurement dans la demande (cela peut être évident si vous souhaitez simplement inclure cette mise en garde). L'inclusion du champ id est généralement une bonne idée. Par conséquent, Laravel sait comment écrire toutes les mises à jour apportées à l'instance du modèle.

2
Josh Rumbut

Aussi, vous pouvez utiliser le plumer.

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

De laravel 5.3 uniquement avec la méthode get(), vous pouvez obtenir des colonnes spécifiques de votre tableau:

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

Ou à partir de laravel 5.4, vous pouvez également utiliser la méthode all() pour obtenir les champs de votre choix:

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

avec les deux méthodes ci-dessus get() ou all(), vous pouvez également utiliser where(), mais la syntaxe est différente pour les deux:

Model :: all ()

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

Model :: get ()

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

Vous pouvez utiliser la requête ci-dessous:

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

vous pouvez aussi utiliser findOrFail() method here c'est bien d'utiliser

si l'exception n'est pas interceptée, une réponse HTTP 404 est automatiquement renvoyée à l'utilisateur. Il n'est pas nécessaire d'écrire des vérifications explicites pour renvoyer 404 réponses lorsque cette méthode ne donne pas une erreur 500.

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

Si vous souhaitez obtenir une ligne et une colonne à la fois, un code de ligne pour obtenir la valeur de la colonne spécifique consiste à utiliser la méthode find() en spécifiant la colonne dans laquelle vous souhaitez la récupérer.

Voici un exemple de code:

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

Obtenir la valeur d'une colonne:

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

Même vous pouvez utiliser cette méthode avec la clause where:

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