【问题标题】:Store only integer value from sql select仅存储来自 sql select 的整数值
【发布时间】:2017-04-27 19:41:52
【问题描述】:

我试图只获取没有列名的整数值(序列号),这使它成为一个字符串。我在 Laravel 工作,因此如有必要,我可以使用 Laravel 函数进行 SQL 查询。

$idcko = DB::table('repairs')
         ->select('id')
         ->latest();

所以当我打印idcko 时,我得到类似{"column name": 2} 我只想要号码2

更新:

在答案的帮助下,我想出了这个主意:

$idcko = DB::table('repairs')
                                ->select('id')
                                ->orderBy('id','desc')
                                ->first()
                                ->id;

因为我没有时间戳列并且我想获得最新/最高的id,所以我可以做一个小技巧并按id 排序并只选择第一行。

【问题讨论】:

    标签: php sql laravel


    【解决方案1】:

    latest() 只是添加一个 order by 子句并返回构建器实例。 (See the API reference.) 您仍然需要使用一些 fetch 方法来实际获取任何记录以从中提取值。由于您尝试获取单个值,因此您可以使用 first() 然后从该记录中获取您想要的属性。

    $id = DB::table('repairs')->select('id')->latest()->first()->id;
    

    【讨论】:

    • 对于两个答案(Samsquanch),我都收到了这个错误:Undefined column: 7 ERROR: column "created_at" does not exist LINE 1: select "id" from "repairs" order by "created_at" desc limit ... ^ (SQL: select "id" from "repairs" order by "created_at" desc limit 1)
    • 是的,latest() 取决于您是否有时间戳列。它默认使用created_at,但如果您的时间戳列的名称不同,您可以传递一个不同的。
    • 但我没有更改它的名称。如果是serial 类型,还有其他方法如何获取最新的id
    • 我想我可能误解了你想要做什么。您能否编辑问题以添加有关您的总体目标的更多上下文/详细信息?
    • 我已经更新了我的问题,我在您的帮助下发布了我的解决方案。
    【解决方案2】:

    你只是想检索列的值,所以使用value()

    $idcko = DB::table('repairs')
                 ->select('id')
                 ->latest()
                 // ->first()      // get the first result -- may not be needed?
                 ->value('id'); // or any other column name here
    

    【讨论】:

    • 哦,是的,忘记了 value()。这样更好。
    • @Don'tPanic 感谢first() 的提示,我认为latest() 返回了一个结果。
    • 我认为你一开始是对的。我相信->value('id') 是等效于->first()->id 的快捷方式
    • 伙计们,对于你们的两个答案,我得到的错误与我在@Don'tPanic 答案中的评论中提到的相同。
    • @Ady96 您确定要选择的列在repairs 表中吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-17
    相关资源
    最近更新 更多