193 votes

Comment sélectionner des colonnes spécifiques dans Laravel Eloquent ?

Disons que j'ai 7 colonnes dans le tableau, et je veux en sélectionner seulement deux, quelque chose comme ceci

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

Dans le modèle laravel eloquent, cela peut ressembler à ceci

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

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

0 votes

Merci de m'avoir posé la question. C'est fou car j'ai toujours fait cela correctement dans les requêtes SQL 'classiques', mais en utilisant Eloquent, j'ai trouvé cela tellement confus que j'étais content de le faire fonctionner, et j'étais inconscient de la quantité de mémoire que mes requêtes utilisaient parce que je sélectionnais tout.

0 votes

ModelName::findOrFail(1, ['name', 'surname']) ;

296voto

Marcin Nabiałek Points 13843

Vous pouvez le faire comme ça :

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

1 votes

Supposons que je veuille sélectionner tous les champs sauf un, comment puis-je le faire ?

2 votes

Tout d'abord, si vous avez une question, posez-la. Et dans votre cas - mentionnez simplement toutes les colonnes au lieu de celle que vous ne voulez pas inclure. C'est aussi simple que cela.

2 votes

Il n'y a pas d'autre méthode pour faire cela sans mentionner toutes les colonnes

94voto

Utkarsh Pandey Points 564
Table::where('id', 1)->get(['name','surname']);

1 votes

Je veux la même chose mais en utilisant une méthode différente. Je veux sélectionner la méthode en créant une instance du modèle puis en sélectionnant la colonne. Par exemple, $model = new MyModel() ; $model->select(['col1', 'col2']) ; Mais cela ne fonctionne pas.

0 votes

Je pense que c'est ainsi qu'il est censé être utilisé. Mais je ne sais pas si select() est plus rapide que get().

71voto

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

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

Note : Laravel 5.4

0 votes

Je veux la même chose mais en utilisant une méthode différente. Je veux sélectionner la méthode en créant une instance du modèle puis en sélectionnant la colonne. Par exemple $model = new MyModel() ; $model->select(['col1', 'col2']) ; Mais cela ne fonctionne pas.

27voto

user3888958 Points 167

Aussi Model::all(['id'])->toArray() il ne récupérera que l'id dans un tableau.

24voto

Mahesh Yadav Points 382

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

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

0 votes

C'est la meilleure réponse, car elle fonctionne également avec les tableaux croisés dynamiques dans les relations entre plusieurs personnes.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X