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.