Pobieranie pojedynczej wartości z DB :: select w Laravel 7.x

Dec 01 2020

Używam Laravel DB::selectdo uruchomienia kwerendy w celu uzyskania MAX()wartości. Chcę tylko jednej wartości kolumny z wyniku pojedynczego wiersza. Jakiej metody używam, aby uzyskać to z DB::select()wyciągu?

Znalazłem tę odpowiedź, wprowadź tutaj opis linku, który zaoferował zarówno pluck()i value(). Zachowanie pluck()zmieniło się od 5.3, więc to nie była odpowiedź. Jednak kiedy użyłem value(), nie uzyskałem oczekiwanej wartości. Zamiast tego otrzymałem błąd dotyczący tablicy:

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

Błąd HTTP 500 Wewnętrzny błąd serwera

Wywołanie funkcji składowej value () w tablicy

Oczywiście mogę przejść przez tablicę, aby wyciągnąć wartość, ale celem korzystania z metody jest uniknięcie takiej dodatkowej sztywności.


Na prośbę w komentarzach, oto kilka przykładowych danych i oczekiwany wynik. Najpierw zapytanie:

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

Po drugie, co chciałbym uzyskać:

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

^ 3

Odpowiedzi

2 TimBiegeleisen Dec 01 2020 at 12:29

Możesz po prostu spróbować użyć wbudowanej MAXfunkcji Laravel :

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

chcesz mieć jedną kolumnę dla jednej maksymalnej wartości zwracanej

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