Laravel Eloquent - 获取一行
Posted
技术标签:
【中文标题】Laravel Eloquent - 获取一行【英文标题】:Laravel Eloquent - Get one Row 【发布时间】:2014-07-18 11:52:15 【问题描述】:这可能是一个简单的问题,但我无法弄清楚。我正在尝试通过电子邮件获取用户:
$user = User::whereEmail($email)->get();
但这会返回一个 $users 的数组(维度为 1)。所以如果我想得到名字,我必须做$user[0]['first_name']
。
我尝试使用limit(1)
或take(1)
,甚至使用->toArray()
,但没有区别。
我做错了什么?
【问题讨论】:
您想从查询结果中获取一行?或者你只想要数据库查询中的一行? 【参考方案1】:只需使用这个:
$user = User::whereEmail($email)->first();
【讨论】:
【参考方案2】:你也可以这样做
在你使用它之前,你必须在控制器中声明 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']);
这个返回一个数组,其中只有一个项目,而第一个返回一个对象。请记住这一点。
希望这会有所帮助。
【讨论】:
【参考方案3】:使用 Laravel Eloquent,您可以使用 first()
方法获得一行,
如果没有找到where()
条件,则返回表的第一行,否则给出给定条件的第一行匹配。
语法:
Model::where('fieldname',$value)->first();
示例:
$user = User::where('email',$email)->first();
//OR
//$user = User::whereEmail($email)->first();
【讨论】:
【参考方案4】:laravel 5.8
如果您甚至不需要整行,您可以使用value()
方法从记录中提取单个值。该方法会直接返回该列的值:
$first_name = DB::table('users')->where('email' ,'me@mail,com')->value('first_name');
检查docs
【讨论】:
【参考方案5】: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 中的存储量,可能会导致它崩溃。您只需要一个用户,因此无需在所有用户上浪费内存。指示数据库仅按照接受的答案中的建议向您发送$user = User::whereEmail($email)->first();
的第一个用户。【参考方案6】:
试试看
$color = \App\Color::take(1)->first();
【讨论】:
【参考方案7】:如果您需要查找任何特定字段,您可以使用
$user = User::where('email',$email)->first();
$user = User::where('username',$username)->first();
$user = User::where('id',$id)->first();
【讨论】:
以上是关于Laravel Eloquent - 获取一行的主要内容,如果未能解决你的问题,请参考以下文章
Laravel Eloquent ORM - 获取第一个和第三个表数据
Laravel Eloquent ORM - 获取第一和第三表数据
如何使用 Laravel 的 Eloquent/Fluent 将每一行设置为相同的值?