Laravel Eloquent-한 줄 가져 오기


88

이것은 간단한 질문 일 수 있지만 나는 이것을 이해할 수 없습니다. 다음을 사용하여 이메일로 사용자를 얻으려고합니다.

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

그러나 이것은 $ users의 배열 (차원 1)을 반환합니다. 그래서 이름을 알고 싶다면 $user[0]['first_name'].

나는 limit(1)또는을 사용 하거나 take(1)사용해 ->toArray()보았지만 차이가 없었습니다.

내가 도대체 ​​뭘 잘못하고있는 겁니까?


1
쿼리 결과에서 하나의 행을 얻고 싶습니까? 아니면 데이터베이스 쿼리에서 하나의 행을 원하십니까?

답변:



21

너도 할 수있어

이것을 사용하기 전에 컨트롤러에서 DB 파사드를 선언해야합니다.

use Illuminate\Support\Facades\DB;

이제 이것을 사용하여 행을 얻을 수 있습니다.

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

또는 이것으로도

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

이것은 하나의 항목 만있는 배열을 반환하고 첫 번째 항목은 객체를 반환합니다. 명심하십시오.

도움이 되었기를 바랍니다.


7

Laravel Eloquent를 사용하면 first()메소드를 사용하여 하나의 행을 얻을 수 있습니다 .

where()조건이 발견되지 않으면 테이블의 첫 번째 행을 반환합니다. 그렇지 않으면 주어진 기준의 첫 번째 일치 행을 제공합니다.

통사론:

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

예:

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

0

라 라벨 5.8

전체 행이 필요하지 않은 경우 value()메서드를 사용하여 레코드에서 단일 값을 추출 할 수 있습니다 . 이 메서드는 열 값을 직접 반환합니다.

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

문서 확인



-4

라 라벨 5.2

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

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

또는

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

이렇게하면 데이터베이스의 모든 사용자가 웹 애플리케이션 서버의 메모리로로드되고 서버의 RAM에 저장할 수있는 것보다 많은 사용자 데이터가있는 경우 충돌이 발생할 수 있습니다. 한 명의 사용자 만 필요하므로 모든 사용자에게 메모리를 낭비 할 필요가 없습니다. $user = User::whereEmail($email)->first();수락 된 답변에 제안 된 대로만 첫 번째 사용자를 보내도록 데이터베이스에 지시합니다 .
— Mladen Danic

-13

이것을 사용할 수도 있습니다

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

2
이것은 하나의 요소가 아닌 컬렉션을 반환합니다.
— Danon

한 행뿐만 아니라 전체 영향을받은 데이터를 반환하지 않습니다. \
— Nadeem

4
답변은 현재 정확합니다 (편집 됨), 반대 투표의 이유는 이전 답변 (편집 전)입니다
— J. Doe
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.