我正在尝试使用laravel从MySQL数据库中获取单个值,但是我得到一个数组的问题。 这是我在 MySQL 命令行中的查询结果:
select groupName from users;
+-----------+
| groupName |
+-----------+
| Admin |
+-----------+
我的拉拉维尔功能:
public static function PermitAddNewUser(){
$username=Session::get('key');
$data=DB::select("select groupName from users where username='$username';");
return $data;
}
预期值$data值为 value = 管理员的字符串
但我得到的是:[{"groupName":"Admin"}]
另一个编辑:从版本 5.2 开始,pluck
不再被弃用,它只是获得了新的行为(与之前的lists
相同 - 请参阅下面的旁注(:
编辑:从版本 5.1 开始,pluck
已被弃用,因此请改用value
:
DB::table('users')->where('username', $username)->value('groupName');
// valid for L4 / L5.0 only
DB::table('users')->where('username', $username)->pluck('groupName');
这将返回找到的第一行groupName
字段的单个值。
旁注注册@TomasButeler评论:由于Laravel不遵循合理的版本控制,因此有时会出现这样的情况。在撰写此答案时,我们pluck
方法可以从查询中获取单个值(Laravel 4.* 和 5.0(。
然后,在 L5.1 中,pluck
被弃用,取而代之的是value
方法来替换它。
但有趣的是,pluck
实际上从未消失过。相反,它只是获得了全新的行为,并且...已弃用lists
方法。.(L5.2( - 这是由查询生成器和集合方法之间的不一致引起的(在 5.1 中pluck
集合和查询的工作方式不同,这就是原因(。
编辑:
对不起,我忘记了pluck()
正如许多人评论的那样:最简单的方法是:
return DB::table('users')->where('username', $username)->pluck('groupName');
这将直接以字符串形式返回所请求行的唯一第一个结果。
使用流畅的查询构建器,您无论如何都会获得一个数组。我的意思是查询生成器不知道该查询会返回多少行。这是您可以做的更干净一点
$result = DB::table('users')->select('groupName')->where('username', $username)->first();
first()
告诉 queryBuilder 只返回一行,所以没有数组,所以你可以这样做:
return $result->groupName;
希望对你有帮助
从 Laravel>= 5.3 开始,最好的方法是使用值:
$groupName = 'App'User::where('username',$username)->value('groupName');
或
use App'User;//at top of controller
$groupName = User::where('username',$username)->value('groupName');//inside controller function
当然,您必须为用户表创建一个模型,这是与 Laravel 中的数据库表交互的最有效方式。
[编辑]pluck
函数的预期输出已从 Laravel 5.1 更改为 5.2。因此,为什么它在 5.1 中被标记为已弃用
在 Laravel 5.1 中,pluck
从查询的第一个结果中获取单个列的值。
在 Laravel 5.2 中,pluck
得到一个包含给定列值的数组。因此,它不再被弃用,但它不再像以前那样工作。
所以简短的回答是使用 value
函数,如果你想要第一行的一列,并且你使用的是 Laravel 5.1 或更高版本。
感谢Tomas Buteler在评论中指出这一点。
[原文]对于任何遇到这个问题的人,他们正在使用Laravel 5.1,pluck((已被弃用,并将在Laravel 5.2中完全删除。
请考虑改用value()
来证明您的代码。
return DB::table('users')->where('username', $username)->value('groupName');
使用查询生成器获取单列值,例如 groupName
$groupName = DB::table('users')->where('username', $username)->pluck('groupName');
对于拉拉维尔 5.1
$groupName=DB::table('users')->where('username', $username)->value('groupName');
或者,使用用户模型获取单列值
$groupName = User::where('username', $username)->pluck('groupName');
或者,获取第一行,然后拆分以获取单列值
$data = User::where('username', $username)->first();
if($data)
$groupName=$data->groupName;
继续,这是您在 Laravel 7.x 或 8.x 中的做法
$email = DB::table('users')->where('name', 'John')->value('email');
来源: 相信我
<小时 />根据扎曼@Shuhad评论更新
在 laravel 5.6 上,它有一个非常简单的解决方案:
User::where('username', $username)->first()->groupName;
它将以字符串形式返回组名。