Laravel:从MySQL查询中获取单个值

时间:2014-09-19 09:37:37

标签: php mysql sql laravel

我正在尝试使用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"}]

7 个答案:

答案 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.1pluck从查询的第一个结果中获取单个列的值。

In Laravel 5.2pluck获取一个包含给定列值的数组。因此它不再被弃用,但它不再像过去那样做了。

如果你想要第一行中的一列而你正在使用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.x8.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 作为字符串。