Laravel: un une seule valeur à partir d'une requête MySQL
Je suis en train d'essayer d'obtenir une valeur unique de base de données MySQL à l'aide de laravel, mais le problème, je vais obtenir un tableau . c'est mon résultat de la requête à MySQL en ligne de commande:
select groupName from users;
+-----------+
| groupName |
+-----------+
| Admin |
+-----------+
mon laravel fonction:
public static function PermitAddNewUser(){
$username=Session::get('key');
$data=DB::select("select groupName from users where username='$username';");
return $data;
}
prévus de données de la valeur est une chaîne de caractères avec la valeur= Admin
mais ce que je reçois est : [{"groupName":"Admin"}]
- C'est la chose drôle au sujet des bases de données, tables se composent de lignes et de colonnes, tout comme un tableau....
if (!empty($data)) { return $data[0]->groupName; } return null;
- Maintenant, pourquoi êtes-vous à l'aide de son Éloquence, mais pour ne pas profiter des avantages d'un ORM, mais simplement de l'écriture de requêtes comme vous le feriez sans un ORM?
$data = DB::table('users')->where('username', $username)->pluck('groupName');
- merci beaucoup ça fonctionne bien comme ça return $data[0]->nom de groupe;
- oui à l'aide de la seconde manière d'utiliser l'ORM aussi, beau travail ,vous êtes génial .
- Que faire si je reçois undefined offset?? surtout quand je veux gérer plusieurs colonnes. L'erreur vient du zéro dans $data[0]
- Si vous obtenez cette erreur, c'est parce que les documents n'ont été renvoyés par la requête de base de données
- mais si vous avez une question à poser, poser une question; non pas comme un commentaire sur quelqu'un d'autre de 8 mois en question
Vous devez vous connecter pour publier un commentaire.
Edit:
Désolé j'ai oublié arracher() comme beaucoup l'ont dit :
Manière la plus simple est :
Qui va retourner directement le seul le premier résultat de la ligne demandée comme une chaîne de caractères.
À l'aide de la courant de générateur de requête, vous obtiendrez un tableau de toute façon.
Je veux dire Le Générateur de Requête n'a aucune idée du nombre de lignes de revenir partir de cette requête.
Voici ce que vous pouvez faire pour le faire un peu plus propre
La première() indique le queryBuilder pour retourner une seule ligne donc pas de tableau, de sorte que vous pouvez faire :
Espère que cela aide
first
retourne parfoisnull
..pluck()
toujours retourner un tableauencore une autre édition: à partir de la version 5.2
pluck
est pas obsolète plus, il a juste obtenu un nouveau comportement (le même quelists
précédemment - voir note ci-dessous):modifier: à partir de la version 5.1
pluck
est obsolète, donc, commencer à utiliservalue
à la place:elle va retourner la valeur unique de
groupName
champ de la première ligne trouvée.NOTE de CÔTÉ reg. @TomasButeler commentaire: Que Laravel ne suit pas sensible la gestion des versions, il y a parfois des cas de ce genre. Au moment de la rédaction de cette réponse, nous avons eu
pluck
méthode pour obtenir la valeur UNIQUE de la requête (Laravel 4.* & 5.0).Puis, L5.1
pluck
ai obsolète et, au lieu de cela, nous avons euvalue
méthode pour le remplacer.Mais pour le rendre amusant,
pluck
, en fait, n'a jamais disparu. Au lieu de cela, il est maintenant complètement nouveaux comportements et... obsolètelists
méthode.. (L5.2) - qui a été causé par l'incompatibilité entre le Générateur de Requêtes et méthodes de Collecte (en 5.1pluck
travaillé différemment sur la collection et la requête, qui est la raison).isset()
☺pluck
méthode n'a pas été dépréciés;lists
, qui est un alias, sur l'autre main, est. En outre,value
etpluck
ne sont pas interchangeables --pluck
retournera un tableau de colonnes demandées (avec une option de clé, si une deuxième paramètre est donné) alors quevalue
fournira la valeur de la premier résultat retourné par le générateur de requêtes.De Laravel >= 5.3, le meilleur moyen est d'utiliser valeur:
ou
Bien sûr, vous devez créer un modèle Utilisateur pour les utilisateurs de tableau qui est le moyen le plus efficace pour interagir avec les tables de base de données dans Laravel.
[MODIFIER]
La sortie attendue de la
pluck
fonction a changé à partir de Laravel 5.1 5.2. Donc pourquoi elle est marquée comme obsolète en 5.1Dans Laravel 5.1,
pluck
obtient une seule valeur de la colonne à partir de la première suite d'une requête.Dans Laravel 5.2,
pluck
obtient un tableau avec les valeurs d'une colonne donnée. Il n'est donc plus obsolète, mais il n'est plus ce qu'elle était.Si courte réponse est l'utilisation de la
value
fonction de si vous voulez une colonne de la première ligne et à l'aide de Laravel 5.1 ou au-dessus.Grâce à Tomas Buteler pour le signaler dans les commentaires.
[ORIGINAL]
Pour ceux qui viennent à travers cette question qui est à l'aide de Laravel 5.1, arracher() a été désapprouvée et sera complètement supprimé dans Laravel 5.2.
Penser au futur aménagement de votre code à l'aide de
value()
à la place.pluck
n'a pas été déprécié!lists
était déconseillé dans Laravel 5.2 et sera supprimée dans une version ultérieure, maispluck
sera, nous l'espérons vivre pendant un bon moment.pluck
fonction. J'ai mis à jour ma réponse avec des détails supplémentaires sur les différences entre lespluck
fonction en 5.1 et 5.2.En utilisant le générateur de requêtes, obtenir la seule valeur de la colonne comme groupName
Pour Laravel 5.1
Ou, à l'Aide de modèle d'utilisateur, obtenir la seule valeur de la colonne
Ou, au bout de la première ligne, puis diviser pour arriver seule valeur de la colonne
Sur laravel 5.6 il a une solution très simple:
Il sera de retour groupName comme une chaîne de caractères.
->value('groupName')
devrait faire unSELECT groupname FROM
et le retour de la chaîne directement au lieu de récupérer toutes les infos de l'utilisateur et la création d'un objet utilisateur.