Eloquent - 从登录用户获取特定列

时间:2016-05-22 23:08:39

标签: php mysql laravel orm eloquent

在Laravel中$user = Auth::user()返回当前登录的用户。从这个用户我想只检索几列到键值数组。我有什么选择?

示例:

$user = Auth::user()->fetch('id', 'username', 'email');

应该给我

[
    "id" => 1,
    "username" => "John Doe",
    "email" => "john@doe.example"
]

我已经搜索了Eloquent文档,但还没找到我正在寻找的功能。我错过了吗?这样的功能不存在吗?

2 个答案:

答案 0 :(得分:5)

如果您的主要目标是获取数组而不是对象,并且数组中的额外字段不是问题,因为您的必需字段存在,您可以将用户模型转换为数组:

Auth::user()->toArray();
(array) Auth::user();

但是,如果您需要输出只有这3个属性 - 您必须进行一些额外的编码。我建议在User模型中创建一个包含公开字段列表的属性。然后重写toArray()方法(或创建另一个方法),只返回列表中的字段。

答案 1 :(得分:3)

Auth::user()为您提取用户对象,因此您不再使用Eloquent并且无法使用Eloquent方法。

模型上没有返回给定属性数组的方法(参考:https://laravel.com/api/5.2/Illuminate/Database/Eloquent/Model.html),但您可以在User模型上创建一个,例如:< / p>

function myData($keys) {
    return array_intersect_key($this->toArray(), array_flip($keys))
}

然后您可以使用$user->myData(['id', 'username', 'keys'])

来调用它