web-dev-qa-db-fra.com

Laravel: obtenir une valeur unique à partir d'une requête MySQL

J'essaie d'obtenir une valeur unique de la base de données MySQL en utilisant laravel, mais le problème est d'obtenir un tableau. Voici le résultat de ma requête en ligne de commande MySQL:

select groupName from users;

+-----------+
| groupName |
+-----------+
| Admin     |
+-----------+

ma fonction laravel:

public static function PermitAddNewUser(){
    $username=Session::get('key');
    $data=DB::select("select groupName from users where username='$username';");
    return $data; 
}

valeur attendue $ data est une chaîne avec la valeur = Admin

mais ce que je reçois, c'est: [{"groupName":"Admin"}]

34
Osama Al-Banna

Modifier:

Désolé j'ai oublié de pluck () comme beaucoup l'ont commenté: Le moyen le plus simple est:

return DB :: table ('utilisateurs') -> où ('nomutilisateur', $ nomutilisateur) -> pluck ('nom groupe');

Ce qui retournera directement le seul premier résultat pour la ligne demandée sous forme de chaîne.

De toute façon, en utilisant le constructeur de requêtes courant, vous obtiendrez un tableau . Je veux dire que le constructeur de requêtes n'a aucune idée du nombre de lignes qui reviendront de cette requête .

$ resultat = DB :: table ('utilisateurs') -> select ('nomgroupe') -> où ('nomutilisateur', $ nomutilisateur) -> premier ();

La première () indique à queryBuilder de ne renvoyer qu'une seule ligne, donc aucun tableau, vous pouvez donc:

return $ result-> groupName;

J'espère que ça aide

37
elfif

encore une édition : Depuis la version 5.2 pluck est pas obsolète, il a juste eu un nouveau comportement (identique à lists précédemment - voir sidenote ci-dessous):

edit : À partir de la version 5.1 pluck est obsolète, commencez donc à utiliser value à la place:

DB::table('users')->where('username', $username)->value('groupName');    

// valid for L4 / L5.0 only
DB::table('users')->where('username', $username)->pluck('groupName');

cela renverra la valeur unique du champ groupName de la première ligne trouvée.


NOTE D'APPUI rég. @TomasButeler comment : Comme Laravel ne suit pas de version sensible, il y a parfois des cas comme celui-ci. Au moment de la rédaction de cette réponse, nous avions la méthode pluck pour obtenir la valeur SINGLE de la requête (Laravel 4. * & 5.0).

Ensuite, avec L5.1, pluck est devenu obsolète et à la place, nous avons eu la méthode value pour la remplacer.

Mais pour rendre cela drôle, pluck n’a en fait jamais disparu. Au lieu de cela, il vient d'obtenir un comportement complètement nouveau et une ... méthode lists obsolète ... (L5.2) - qui était due à l'incohérence entre les méthodes Query Builder et Collection (en 5.1, pluck fonctionnait différemment pour la collection et la requête, la raison étant celle-ci) .

45
Jarek Tkaczyk

A partir de Laravel> = 5.3, le meilleur moyen est d’utiliser value :

$groupName = \App\User::where('username',$username)->value('groupName');

ou

use App\User;//at top of controller
$groupName = User::where('username',$username)->value('groupName');//inside controller function

Bien sûr, vous devez créer un modèle de table utilisateur pour utilisateurs qui constitue le moyen le plus efficace d'interagir avec les tables de base de données dans Laravel.

11
Learner

[EDIT] Le résultat attendu de la fonction pluck est passé de Laravel 5.1 à 5.2. D'où pourquoi il est marqué comme obsolète en 5.1

Dans Laravel 5.1 , pluck obtient la valeur d'une colonne unique du premier résultat d'une requête.

Dans Laravel 5.2 , pluck obtient un tableau avec les valeurs d'une colonne donnée. Donc, ce n'est plus obsolète, mais il ne fait plus ce qu'il était.

La réponse courte est donc d'utiliser la fonction value si vous voulez une colonne de la première ligne et que vous utilisez Laravel 5.1 ou une version ultérieure.

Merci à Tomas Buteler pour l'avoir signalé dans les commentaires.

[ORIGINAL] Pour ceux qui utilisent Laravel 5.1 avec cette question, pluck () est obsolète et sera complètement supprimé de Laravel 5.2.

Envisagez une vérification future de votre code en utilisant plutôt value().

return DB::table('users')->where('username', $username)->value('groupName');
5
Maxime Rainville

À l'aide du générateur de requêtes, obtenez la valeur de colonne unique telle que nomGroupe

  $groupName = DB::table('users')->where('username', $username)->pluck('groupName');

Pour Laravel 5.1

 $groupName=DB::table('users')->where('username', $username)->value('groupName');

Ou, à l'aide du modèle utilisateur, obtenez la valeur de colonne unique

 $groupName = User::where('username', $username)->pluck('groupName');

Ou bien, obtenez la première ligne, puis divisée pour obtenir une valeur de colonne unique

 $data = User::where('username', $username)->first();
 if($data)
   $groupName=$data->groupName;
3
Majbah Habib

Sur laravel 5.6, la solution est très simple:

User::where('username', $username)->first()->groupName;

Il retournera NomGroupe sous forme de chaîne.

0