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 结果错误查询

Laravel 4:如何在页脚中显示查询结果

laravel中查询数据结果集变为数组

在 Laravel 5 Eloquent 中获取原始 SQL 查询的结果

如何使用 laravel 查询生成器从表联合的结果中选择列?