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

Osa*_*nna 41 php mysql sql laravel

我正在尝试使用laravel从MySQL数据库中获取单个值,但问题是我得到了一个数组.这是我在MySQL命令行中的查询结果:

select groupName from users;
Run Code Online (Sandbox Code Playgroud)
+-----------+
| groupName |
+-----------+
| Admin     |
+-----------+
Run Code Online (Sandbox Code Playgroud)

我的laravel功能:

public static function PermitAddNewUser(){
    $username=Session::get('key');
    $data=DB::select("select groupName from users where username='$username';");
    return $data; 
}
Run Code Online (Sandbox Code Playgroud)

期望的$ data值是一个值为= Admin的字符串

但我得到的是: [{"groupName":"Admin"}]

Jar*_*zyk 57

另一个编辑:从版本5.2 pluck不是不再过时,它刚刚得到新的行为(如同lists以前-见下文旁注):

编辑:从版本5.1 pluck开始不推荐使用,因此请value改为使用:

DB::table('users')->where('username', $username)->value('groupName');    
Run Code Online (Sandbox Code Playgroud)
// valid for L4 / L5.0 only
DB::table('users')->where('username', $username)->pluck('groupName');
Run Code Online (Sandbox Code Playgroud)

这将返回groupName找到的第一行字段的单个值.


侧面注意 @TomasButeler评论:由于Laravel不遵循合理的版本控制,有时会出现类似这样的情况.在撰写此答案时,我们有pluck方法从查询中获取SINGLE值(Laravel 4.*&5.0).

然后,L5.1 pluck被弃用了,相反,我们得到value了替换它的方法.

但为了让它变得有趣,pluck事实上从未消失过.相反它只是得到了全新的行为和...弃用的lists方法..(L5.2) - 这是由查询生成器和收集方法之间的不一致引起的(在5.1中pluck对收集和查询的工作方式不同,这是原因).

  • @TomasButeler这是真的.如果你是Laravel的新手,那么请用适当的评论再次看到答案:) Laravel虽然太酷了,但往往不符合自己的标准. (2认同)

elf*_*fif 46

编辑:

对不起,我忘记了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.2 +`pluck()`将始终返回一个数组 (7认同)

Lea*_*ner 18

从Laravel> = 5.3开始,最好的方法是使用:

$groupName = \App\User::where('username',$username)->value('groupName');
Run Code Online (Sandbox Code Playgroud)

要么

use App\User;//at top of controller
$groupName = User::where('username',$username)->value('groupName');//inside controller function
Run Code Online (Sandbox Code Playgroud)

当然,您必须为用户表创建一个User User模型,这是与Laravel中的数据库表进行交互的最有效方式.


psz*_*aba 6

继续,这是在 Laravel 7.x8.x中的操作方法

$email = DB::table('users')->where('name', 'John')->value('email');
Run Code Online (Sandbox Code Playgroud)

来源:相信我


根据@Shuhad zaman 评论更新


Max*_*lle 5

[编辑]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');
Run Code Online (Sandbox Code Playgroud)


Maj*_*bib 5

使用查询构建器,获取单列值,例如groupName

  $groupName = DB::table('users')->where('username', $username)->pluck('groupName');
Run Code Online (Sandbox Code Playgroud)

对于 Laravel 5.1

 $groupName=DB::table('users')->where('username', $username)->value('groupName');
Run Code Online (Sandbox Code Playgroud)

或者,使用用户模型,获取单列值

 $groupName = User::where('username', $username)->pluck('groupName');
Run Code Online (Sandbox Code Playgroud)

或者,获取第一行然后拆分以获取单列值

 $data = User::where('username', $username)->first();
 if($data)
   $groupName=$data->groupName;
Run Code Online (Sandbox Code Playgroud)