Laravel如何使用Query Builder返回单列值

use*_*495 20 php laravel

我想使用SQL Query中的数据,在这里进一步解释它是我的代码:

    $myquery = DB::table('attendances')->select('user_id')->where('date_only', '=', $newdate)->orderBy('logon','asc')->get();

    $myquery->user_id;
Run Code Online (Sandbox Code Playgroud)

现在我希望我的$ myquery的值为USER_ID的值,如果我使用了上面的代码,我会收到错误 - $ myquery-> user_id;

Jar*_*zyk 23

编辑:从版本5.1开始 pluck不推荐使用,因为5.2它的含义完全不同(lists以前是这样),所以请改用use value方法.


你正在尝试获取数组的属性,所以很明显你会收到错误.

如果只需要单个字段,则使用pluck(返回单个值 - 默认情况下为字符串):

// let's assume user_id is 5

DB::table('attendances')
  ->where('date_only', '=', $newdate)
  ->orderBy('logon','asc')
  ->pluck('user_id');  // "5"
Run Code Online (Sandbox Code Playgroud)

当你需要整行,然后first(返回stdObject):

$att = DB::table('attendances')
  ->where('date_only', '=', $newdate)
  ->orderBy('logon','asc')
  ->first();

$att->user_id; // "5"
$att->any_other_column;
Run Code Online (Sandbox Code Playgroud)

并且get当你想要多个结果(返回简单的stdObjects数组)时:

$result = DB::table('attendances')
  ->where('date_only', '=', $newdate)
  ->orderBy('logon','asc')
  ->get();

$result; // array(0 => stdObject {..}, 1 => stdObject {..}, ...)
$result[0]->user_id; // "5"
Run Code Online (Sandbox Code Playgroud)

  • @GiuServ**使用源代码,Luke!**https://github.com/laravel/framework/blob/5.1/src/Illuminate/Database/Query/Builder.php#L1368-L1381是的,`value`是新的'采摘' (2认同)

小智 16

那是Laravel 5.3:

$user_id = DB::table('attendances')->select('user_id')->where('date_only', '=', $newdate)->orderBy('logon','asc')->value('user_id');
Run Code Online (Sandbox Code Playgroud)

  • 谢谢!` - > value()`仍然适用于laravel 5.5 (4认同)

小智 8

要仅获取单个列的值列表,您可以这样做。

$result = CustomerInfo::select('eventDate')->pluck('eventDate');
Run Code Online (Sandbox Code Playgroud)

这里 $result 会给你这样的结果:

["2019-03-25","2020-03-31","2019-03-31","2019-04-24","2019-11-26"]
Run Code Online (Sandbox Code Playgroud)

希望它可以帮助某人


小智 5

这只会返回user_id

$myquery = DB::table('attendances')->where('date_only', $newdate)->select('user_id')->pluck('user_id')->first();
Run Code Online (Sandbox Code Playgroud)


ita*_*chi -3

 $myquery = DB::table('attendances')->select('user_id')
            ->where('date_only', '=', $newdate)->orderBy('logon','asc')->get();
Run Code Online (Sandbox Code Playgroud)

默认情况下,返回的数据将是对象数组。你需要循环它。

例如

foreach($myquery as $i)
{
    echo $i->user_id;
}
Run Code Online (Sandbox Code Playgroud)