在 laravel 中使用原始查询从 sql 数据库获取特定列

Getting specific column from sql database using raw query in laravel

我有这个原始查询,它从 table Laravel

中的数据库中提取数据
 $username = DB::table('hotspot_users')
 ->select('userName')  
 ->where('assignedTo', '786')->get();

我得到这些值:[{"userName":"kim"}]

但我只想提取用户名“kim”本身,而不是数组。我尝试这样做但没有成功:

 $convert1=json_decode($username);
 $newusername=$convert1->userName; 

但我得到一个错误:尝试获取 属性 'userName' 的非对象

知道如何解决这个问题

你好
正如你提到的,这是一个数组[{"userName":"kim"}]
所以你有两个选择

首先,你 first 代替了 get

 $username = DB::table('hotspot_users')
 ->select('userName')  
 ->where('assignedTo', '786')->first();

 $newusername=$convert1->userName; 

其次,获取数组的第一个元素

 $username = DB::table('hotspot_users')
 ->select('userName')  
 ->where('assignedTo', '786')->get();

 $username = reset($username);
 $convert1=json_decode($username);
 $newusername=$convert1['userName']; 

您正在将 DB 的结果作为 php stdClass 对象,因此您可以遍历它并获取查询的每个变量。类似下面的代码可能会对您有所帮助。

如果使用get()

$data = DB::table('hotspot_users')
           ->where('assignedTo', '786')->select('userName')->get();

foreach ($data as $datum) {
    $result[] = $datum->userName;
}

如果使用first()

$data = DB::table('hotspot_users')
            ->where('assignedTo', '786')->select('userName')->first()->userName;

除了你正在做的,你可以这样做:

HotspotUser::where('assignedTo', 786)->pluck('userName');

现在您将拥有一组名称;或者如果你只想要第一个:

HotspotUser::where('assignedTo', 786)->first()->user_name;

(我不确定 属性 是 user_name 还是 userName;您应该使用简单的列名称以使事情变得更容易。)