Laravel Eloquent - Obtenez une ligne


89

C'est peut-être une question simple, mais je ne peux pas comprendre cela. J'essaie d'obtenir un utilisateur par e-mail en utilisant:

$user = User::whereEmail($email)->get();

Mais cela renvoie un tableau (de dimension 1) de $ users. Donc, si je veux obtenir le nom, je dois le faire $user[0]['first_name'].

J'ai essayé d'utiliser limit(1)ou take(1), ou même d'utiliser ->toArray()mais il n'y avait aucune différence.

Qu'est-ce que je fais mal?


1
Vous voulez obtenir une ligne du résultat interrogé? Ou vous voulez juste une ligne de la requête de base de données?

Réponses:



21

Vous pouvez le faire aussi

Avant de l'utiliser, vous devez déclarer la façade DB dans le contrôleur. Mettez simplement cette ligne pour cela

use Illuminate\Support\Facades\DB;

Vous pouvez maintenant obtenir une ligne en utilisant ceci

$getUserByEmail = DB::table('users')->where('email', $email)->first();

ou par ça aussi

$getUserByEmail = DB::select('SELECT * FROM users WHERE email = ?' , ['useremailaddress@email.com']);

Celui-ci retourne un tableau avec un seul élément et tandis que le premier retourne un objet. Garde cela à l'esprit.

J'espère que cela t'aides.


7

En utilisant Laravel Eloquent, vous pouvez obtenir une ligne en utilisant la first()méthode,

il renvoie la première ligne du tableau si la where()condition n'est pas trouvée, sinon il donne la première ligne correspondante de critères donnés.

Syntaxe:

Model::where('fieldname',$value)->first();

Exemple:

$user = User::where('email',$email)->first(); 
//OR
//$user = User::whereEmail($email)->first();

0

laravel 5.8

Si vous n'avez même pas besoin d'une ligne entière, vous pouvez extraire une seule valeur d'un enregistrement à l'aide de la value()méthode. Cette méthode retournera directement la valeur de la colonne:

$first_name = DB::table('users')->where('email' ,'me@mail,com')->value('first_name');

vérifier les documents



-4

Laravel 5.2

$sql = "SELECT * FROM users WHERE email = $email";

$user = collect(\User::select($sql))->first();

ou

$user = User::table('users')->where('email', $email)->pluck();

Cela chargera tous les utilisateurs de votre base de données dans la mémoire du serveur d'applications Web, et le fera éventuellement planter si vous avez plus de données utilisateur que vous ne pouvez stocker dans la RAM de votre serveur. Vous n'avez besoin que d'un seul utilisateur, donc pas besoin de gaspiller de la mémoire sur chacun d'eux. Demandez à la base de données de vous envoyer le premier utilisateur uniquement avec $user = User::whereEmail($email)->first();comme proposé dans la réponse acceptée.
Mladen Danic

-13

Vous pouvez également utiliser ceci

$user = User::whereEmail($email)->first();

2
Cela renverra une collection, pas un élément.
Danon

il renverra les données non toutes les données effectuées non seulement une ligne \
Nadeem

4
Veuillez noter que la réponse est actuellement correcte (elle est modifiée), la raison des votes négatifs est la réponse précédente (avant modification)
J. Doe
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.