Laravel7.xでDB :: selectから単一の値を取得する

Dec 01 2020

Laravelを使用しDB::selectてクエリを実行し、MAX()値を取得しています。単一行の結果から単一列の値のみが必要です。DB::select()ステートメントからこれを取得するには、どの方法を使用しますか?

私はこの答えがpluck()との両方を提供したリンクの説明をここに入力するのを見つけましたvalue()。の動作はpluck()5.3以降変更されていたため、それは答えではありませんでした。しかし、使っvalue()てみると、期待した値が得られませんでした。代わりに、配列に関するエラーが発生しました。

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

エラーHTTP500内部サーバーエラー

配列のメンバー関数value()の呼び出し

もちろん、配列をトラバースして値を取得することはできますが、メソッドを使用することの全体的なポイントは、そのような余分なリガマロールを回避することです。


コメントのリクエストごとに、ここにいくつかのサンプルデータと期待される結果があります。まず、クエリ:

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

回答

2 TimBiegeleisen Dec 01 2020 at 12:29

Laravelの組み込みMAX関数を使ってみてください。

$max_sort = DB::table('man_pos') ->where('manual_id', $manual_id)
    ->max('sort');
NurbekBoymurodov Dec 01 2020 at 12:47

単一の最大戻り値に対して単一の列が必要

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