laravel 中查询的意外结果
Posted
技术标签:
【中文标题】laravel 中查询的意外结果【英文标题】:unexpected result in a query in laravel 【发布时间】:2020-04-22 15:01:05 【问题描述】:我是Laravel
的初学者,但一开始有问题。我写了这个查询,我正在等待Sonya Bins
作为结果,但意外地我看到了["Sonya Bins"]
。有什么问题?
Route::get('products', function ()
$articles=DB::table('users')->where('id','2')->get()->pluck('name');
return view('products',compact('articles'));
);
【问题讨论】:
【参考方案1】:pluck
将返回集合。
我认为id
是您的主键。
您可以只获取第一条记录,并调用其属性名称:
DB::table('users')->where('id','2')->first()->name;
或
DB::table('users')->find(2)->name;
【讨论】:
【参考方案2】:pluck
将返回数组,如果您只想获取单个值然后使用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
方法从记录中提取单个值。该方法会直接返回列的值:
$email = DB::table('users')->where('name', 'John')->value('email');
阅读更多关于它的信息here 希望对您有所帮助。
谢谢
【讨论】:
【参考方案3】:
pluck()
在 Laravel 5.1 之前曾经返回一个字符串,现在返回一个数组。
现在该行为的替代方案是value()
试试这个:
Route::get('products', function ()
$articles=DB::table('users')->where('id','2')->get()->value('name');
return view('products',compact('articles'));
);
【讨论】:
【参考方案4】:我认为使用模型+查找函数+值函数更容易。
Route::get('products', function ()
$articles = User::find(2)->value('name');
return view('products',compact('articles'));
);
【讨论】:
【参考方案5】:第一件事是您使用无效名称作为您传递给视图的名称 - 您传递的不是文章而是用户名。
第二件事是您使用 get 方法而不是第一个(或查找)方法来获取结果 - 您可能希望只有一个 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
将为空)
或
$userName = optional(DB::table('users')->find(2))->name ?? 'No user';
如果您想使用自定义字符串。
【讨论】:
第二件事是您使用 get 方法而不是首先获取结果 - 您可能希望只有一个 id = 2 的用户。id 是主键。* @Bashir_Jafari 我已经添加或查找 - 在这种情况下,最好在按主键搜索时使用 find以上是关于laravel 中查询的意外结果的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Laravel 中使用 LIKE 语句使用查询结果并再次查询
Laravel 4 - Union + orederBy 结果错误查询