我正在尝试使用laravel从MySQL数据库中获取单个值,但问题是我得到了一个数组。这是我在MySQL命令行中的查询结果:
select groupName from users;
+-----------+
| groupName |
+-----------+
| Admin |
+-----------+
我的laravel功能:
public static function PermitAddNewUser(){
$username=Session::get('key');
$data=DB::select("select groupName from users where username='$username';");
return $data;
}
预期的$ data值是一个值为= Admin
的字符串但我得到的是:[{"groupName":"Admin"}]
答案 0 :(得分:48)
又一次修改:版本 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
字段的单个值。
SIDE NOTE reg。 @TomasButeler评论:由于Laravel没有遵循合理的版本控制,有时会出现这种情况。在撰写此答案时,我们使用pluck
方法从查询中获取SINGLE值(Laravel 4. *& 5.0)。
然后,L5.1 pluck
被弃用了,相反,我们用value
方法来替换它。
但为了让它变得有趣,pluck
实际上从未消失过。相反,它只是获得了全新的行为并且...已弃用的lists
方法...(L5.2) - 这是由查询生成器和收集方法之间的不一致引起的(在5.1 pluck
中, colleciton和query,taht的原因)。
答案 1 :(得分:43)
编辑:
对不起,我忘记了pluck(),因为很多人评论说: 最简单的方法是:
返回DB :: table('用户') - >其中('用户名',$ username) - > pluck(' groupName');
将直接以字符串形式返回所请求行的第一个结果。
使用fluent查询构建器,无论如何都将获得一个数组。 我的意思是查询生成器不知道该查询将返回多少行。 这是你可以做些什么来做得更清洁
$ result = DB :: table(' users') - > select(' groupName') - > where(' username',$ username ) - >首先();
第一个()告诉queryBuilder只返回一行所以没有数组,所以你可以这样做:
返回$ result-> groupName;
希望有所帮助
答案 2 :(得分:15)
从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
当然,您必须为用户表创建一个User user模型,这是与Laravel中的数据库表进行交互的最有效方式。
答案 3 :(得分:5)
<强> [编辑] 强>
pluck
函数的预期输出已从Laravel 5.1更改为5.2。因此为什么it is marked as deprecated in 5.1
In Laravel 5.1,pluck
从查询的第一个结果中获取单个列的值。
In Laravel 5.2,pluck
获取一个包含给定列值的数组。因此它不再被弃用,但它不再像过去那样做了。
如果你想要第一行中的一列而你正在使用Laravel 5.1或更高版本,那么简短的回答是使用value
函数。
感谢Tomas Buteler在评论中指出这一点。
<强> [原稿] 强> 对于遇到此问题的任何人,使用Laravel 5.1,pluck() has been deprecated并将在Laravel 5.2中完全删除。
请考虑使用value()
代替您的代码。
return DB::table('users')->where('username', $username)->value('groupName');
答案 4 :(得分:3)
使用查询构建器,获取单个列值,例如 groupName
$groupName = DB::table('users')->where('username', $username)->pluck('groupName');
对于Laravel 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;
答案 5 :(得分:3)
继续,以下是您在 Laravel 7.x 或 8.x
中的操作方法$email = DB::table('users')->where('name', 'John')->value('email');
来源:trust me
根据@Shuhad zaman 评论更新
答案 6 :(得分:0)
在laravel 5.6上,它有一个非常简单的解决方案:
User::where('username', $username)->first()->groupName;
它将返回 groupName 作为字符串。