LaravelEloquent-1行取得


90

これは簡単な質問かもしれませんが、私には理解できません。以下を使用してメールでユーザーを取得しようとしています。

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

しかし、これは$ usersの(次元1の)配列を返しています。だから私が名前を取得したいのなら、私はしなければなりません$user[0]['first_name']

私が使ってみlimit(1)たりtake(1)、あるいは使用し->toArray()たが差はなかったです。

私は何が間違っているのですか?


1
クエリ結果から1行を取得したいですか?または、データベースクエリから1行だけが必要ですか?

回答:



22

あなたもこれを行うことができます

これを使用する前に、コントローラーで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']);

これは、アイテムが1つしかない配列を返し、最初の配列はオブジェクトを返します。心に留めておきます。

お役に立てれば。


7

Laravel Eloquentを使用first()すると、メソッドを使用して1つの行を取得できます。

where()条件が見つからない場合はテーブルの最初の行を返し、それ以外の場合は指定された基準の最初に一致した行を返します。

構文:

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

例:

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

0

laravel 5.8

行全体が必要ない場合は、このvalue()メソッドを使用してレコードから単一の値を抽出できます。このメソッドは、列の値を直接返します。

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

ドキュメントを確認してください



-4

Laravel 5.2

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

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

または

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

これにより、すべてのユーザーがデータベースからWebアプリケーションサーバーのメモリに読み込まれ、サーバーのRAMに保存できるよりも多くのユーザーデータがある場合にクラッシュする可能性があります。必要なユーザーは1人だけなので、すべてのユーザーのメモリを浪費する必要はありません。$user = User::whereEmail($email)->first();受け入れられた回答で提案されているとおりにのみ最初のユーザーを送信するようにデータベースに指示します。
MladenDanic20年

-14

これも使えます

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

2
これにより、1つの要素ではなく、コレクションが返されます。
ダノン

1行だけでなく影響を受けるデータ全体ではなくデータを返します\
Nadeem 2018

5
答えは(それが編集されている)、downvotesの理由は、(編集前の)前の回答で、現在正確であることに注意してください
J. Doeの
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.