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?

Kousha
la source
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:

208

Utilisez simplement ceci:

$user = User::whereEmail($email)->first();
Ganesh Jogam
la source
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 = ?' , ['[email protected]']);

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.

Koushik Das
la source
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();
Haritsinh Gohil
la source
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

Hussam Adil
la source
0

Essayez avec

$color = \App\Color::take(1)->first();
Mahedi Hasan Durjoy
la source
-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();
antelove
la source
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();
Gagandeep
la source
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