it-roy-ru.com

Laravel: получение одного значения из запроса MySQL

Я пытаюсь получить одно значение из базы данных MySQL, используя laravel, но проблема в получении массива. это мой результат запроса в командной строке MySQL:

select groupName from users;

+-----------+
| groupName |
+-----------+
| Admin     |
+-----------+

моя функция laravel:

public static function PermitAddNewUser(){
    $username=Session::get('key');
    $data=DB::select("select groupName from users where username='$username';");
    return $data; 
}

ожидаемое значение $ data - это строка со значением = Admin

но то, что я получаю, это: [{"groupName":"Admin"}]

34
Osama Al-Banna

Правка:

Извините, я забыл про pluck (), как многие прокомментировали: Самый простой способ:

вернуть DB :: table ('users') -> where ('username', $ username) -> pluck ('groupName');

Который будет напрямую возвращать единственный первый результат для запрошенной строки в виде строки.

Используя свободный построитель запросов, вы все равно получите массив . Я имею в виду, что Query Builder не знает, сколько строк вернется из этого запроса . Вот что вы можете сделать, чтобы сделать его немного чище

$ result = DB :: table ('users') -> select ('groupName') -> where ('username', $ username) -> first ();

Метод first () указывает queryBuilder возвращать только одну строку, поэтому нет массива, поэтому вы можете сделать следующее:

return $ result-> groupName;

Надеюсь, поможет

37
elfif

еще одно редактирование: Начиная с версии 5.2pluck больше не является не устаревшим, оно просто приобрело новое поведение (как и ранее lists - см. sidenote ниже):

edit: Начиная с версии 5.1pluck устарела, поэтому вместо нее начните использовать value:

DB::table('users')->where('username', $username)->value('groupName');    

// valid for L4 / L5.0 only
DB::table('users')->where('username', $username)->pluck('groupName');

это вернет единственное значение поля groupName первой найденной строки.


Боковое примечание рег. Комментарий @TomasButeler: Поскольку Laravel не следит за разумным версионированием, иногда бывают подобные случаи. На момент написания этого ответа у нас был метод pluck для получения значения SINGLE из запроса (Laravel 4. * & 5.0).

Затем с L5.1 pluck устарела, и вместо этого мы получили метод value для его замены.

Но, чтобы сделать это забавным, pluck фактически никогда не исчезал. Вместо этого он просто получил совершенно новое поведение и ... устарел метод lists .. (L5.2) - это было вызвано несогласованностью между методами Query Builder и Collection (в 5.1 pluck по-разному работал над коллекцией и запросом, хотя причина в этом) ,.

45
Jarek Tkaczyk

Начиная с Laravel> = 5.3, лучше всего использовать значение :

$groupName = \App\User::where('username',$username)->value('groupName');

или же

use App\User;//at top of controller
$groupName = User::where('username',$username)->value('groupName');//inside controller function

Конечно, вам нужно создать модель User for users table, которая является наиболее эффективным способом взаимодействия с таблицами базы данных в Laravel.

11
Learner

[EDIT] Ожидаемый результат работы функции pluck изменен с Laravel 5.1 на 5.2. Следовательно, почему он помечен как устаревший в 5.1

В Laravel 5.1 , pluck получает значение одного столбца из первого результата запроса.

В Laravel 5.2 , pluck получает массив со значениями данного столбца. Так что это больше не считается устаревшим, но больше не делает то, что раньше.

Таким образом, короткий ответ - использовать функцию value, если вам нужен один столбец из первой строки и вы используете Laravel 5.1 или выше.

Спасибо Томасу Бутелеру за то, что он указал на это в комментариях.

[ORIGINAL] Для всех, кто сталкивается с этим вопросом и использует Laravel 5.1, pluck () устарела и будет полностью удалена в Laravel 5.2.

Подумайте о том, как проверить код на будущее, используя вместо этого value().

return DB::table('users')->where('username', $username)->value('groupName');
5
Maxime Rainville

Используя построитель запросов, получите значение одного столбца, например groupName

  $groupName = DB::table('users')->where('username', $username)->pluck('groupName');

Для Laravel 5.1

 $groupName=DB::table('users')->where('username', $username)->value('groupName');

Или, используя модель пользователя, получите значение одного столбца

 $groupName = User::where('username', $username)->pluck('groupName');

Или получить первую строку, а затем разделить для получения значения одного столбца

 $data = User::where('username', $username)->first();
 if($data)
   $groupName=$data->groupName;
3
Majbah Habib

На laravel 5.6 у него очень простое решение:

User::where('username', $username)->first()->groupName;

Он вернет groupName в виде строки.

0
MD. Shafayatul Haque