laravel 中查询的意外结果

unexpected result in a query in laravel

我是 Laravel 的初学者,但一开始有问题。我写了这个查询,我正在等待结果 Sonya Bins,但出乎意料的是我看到了 ["Sonya Bins"]。有什么问题?

Route::get('products', function () {
$articles=DB::table('users')->where('id','2')->get()->pluck('name');
return view('products',compact('articles'));
});

pluck 将 return collection。

我认为 id 是您的主键。 您可以只获取第一条记录,并调用其属性名称:

DB::table('users')->where('id','2')->first()->name;

DB::table('users')->find(2)->name;

pluck 将 return 数组如果你只想获得单个值然后使用 value

// will return array
$articles=DB::table('users')->where('id','2')->get()->pluck('name');

//will return string
$articles=DB::table('users')->where('id','2')->value('name');
// output Sonya Bins

这是文档中的示例:

如果您甚至不需要整行,您可以使用 value 方法从记录中提取单个值。这个方法会直接return列的值:

$email = DB::table('users')->where('name', 'John')->value('email');

了解更多信息 here 希望对你有帮助。

谢谢

pluck() 在 Laravel 5.1 之前 return 是一个字符串,但现在 return 是一个数组。

现在该行为的替代方案是 value()

试试这个:

Route::get('products', function () {
$articles=DB::table('users')->where('id','2')->get()->value('name');
return view('products',compact('articles'));
});

我觉得用Model + find function + value function更简单。

Route::get('products', function () {
  $articles = User::find(2)->value('name');
  return view('products',compact('articles'));
});

首先,您使用了无效的名称作为传递给查看的内容 - 您传递的不是文章,而是用户名。

第二件事是您使用 get 方法而不是 first(或 find)来获取结果 - 您可能希望只有 id = 2 的单个用户。

总而言之,您应该使用:

$userName = DB::table('users')->find(2)->name;

return view('products',compact('userName'));

当然,上面的代码适用于您 100% 确定数据库中存在 id = 2 的用户的情况。如果可能不会有这样的用户,你应该使用这样的构造:

$userName = optional(DB::table('users')->find(2))->name;

($userName没有记录则为null)

$userName = optional(DB::table('users')->find(2))->name ?? 'No user';

如果您想使用自定义字符串。