在 Laravel 7.x 中从 DB::select 获取单个值

Posted

技术标签:

【中文标题】在 Laravel 7.x 中从 DB::select 获取单个值【英文标题】:Getting a single value from DB::select in Laravel 7.x 【发布时间】:2021-03-13 01:22:15 【问题描述】:

我正在使用 Laravel 的 DB::select 运行查询以获取 MAX() 值。我只想要单行结果中的单列值。我用什么方法从DB::select() 语句中得到这个?

我发现这个答案enter link description here 提供了pluck()value()pluck() 的行为自 5.3 以来发生了变化,所以这不是答案。但是,当我使用value() 时,并没有得到我期望的值。相反,我得到了一个关于数组的错误:

$query =  DB::select('SELECT max(sort) AS sort FROM man_pos WHERE manual_id = ?', [$manual_id]);
dd($query);

错误 HTTP 500 内部服务器错误

调用数组上的成员函数 value()

当然,我可以遍历数组来拉取值,但是使用方法的重点是避免这种多余的繁琐。


根据 cmets 中的请求,这里是一些示例数据和预期结果。一、查询:

MariaDB [dev]> SELECT MAX(sort) FROM man_pos WHERE manual_id = 1;
+-----------+
| MAX(sort) |
+-----------+
|         3 |
+-----------+

二,我想得到什么:

$max_sort = DB::select('SELECT max(sort) AS sort FROM man_pos WHERE manual_id = ?', [$manual_id])->getSingleValue();

dd($max_sort);

^ 3

【问题讨论】:

你能写出样本数据和预期数据吗 @NurbekBoymurodov 请查看编辑 【参考方案1】:

你可以尝试使用 Laravel 内置的 MAX 函数:

$max_sort = DB::table('man_pos')
    ->where('manual_id', $manual_id)
    ->max('sort');

【讨论】:

【参考方案2】:

你想要单个最大返回单个值的单个列

$max_sort = DB::table('man_pos')->select('sort')->where('manual_id', '=', $manual_id)->max('sort');

【讨论】:

@user151841 我刚刚测试过我是错误的,当你使用 max() 时你不需要 get() 和 first() 我编辑的答案你尝试过 Tim Biegelesion 答案它应该是有效的

以上是关于在 Laravel 7.x 中从 DB::select 获取单个值的主要内容,如果未能解决你的问题,请参考以下文章

在 Laravel 中从数据库创建模型

如何将 laravel 版本从 8.x 降级到 7.x?

LARAVEL 在文件上传中从 isValid 获取错误

在 Laravel 6 中从外键获取数据

在 Laravel 中从同一网页发布两个表单

如何在 Laravel 中从 json 索引计数