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';
如果您想使用自定义字符串。
我是 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';
如果您想使用自定义字符串。