Подтвердить что ты не робот

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"}]

4b9b3361

Ответ 1

Edit:

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

return DB:: table ('users') → где ('username', $username) → pluck ('groupName');

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

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

$result = DB:: table ('users') → select ('groupName') → где ('username', $username) → first();

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

return $result- > groupName;

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

Ответ 2

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

edit: Начиная с версии 5.1, pluck устарел, поэтому вместо него начните использовать 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 работала по-разному для коллекции и запроса, причина),

Ответ 3

Как и 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 для таблицы users, которая является наиболее эффективным способом взаимодействия с таблицами базы данных в Laravel.

Ответ 4

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

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

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

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

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

[ОРИГИНАЛ] Для любого, кто сталкивается с этим вопросом, который использует Laravel 5.1, pluck() устарел и полностью удаляется в Laravel 5.2.

Рассмотрим будущую проверку кода с помощью value().

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

Ответ 5

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

  $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;

Ответ 6

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

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

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

Ответ 7

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

Данные 1-й строки в "page1.blade.php" Данные 2-й строки в "page2.blade.php" и т.д.... Моя таблица называется "avo_portfolio"

Моя модель "AvoPortfolio.php"

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;


class AvoPortfolio extends Model { 

    protected $table = "avo_portfolio";
}

Мой контроллер - "AvoPortfolioController.php"

пространство имен App\Http\Controllers;

use View;
use App\AvoPortfolio;
use Illuminate\Routing\Controller as BaseController;


    class AvoPortfolioController extends BaseController {

        public function portfoliopage()
        {
            $porto = AvoPortfolio::all();

            return view('pages.portfolio')->with(['porto' => $porto]);
        }

    }

Моя страница - "portfolio.blade.php", в которой я зацикливаю все содержимое, но хочу отображать только первое содержимое

@foreach($porto as $portfolio)
        <!-- ITEM -->
        <div class="cbp-item item portfolio-item prod">
          <div class="gal-item"> <img src={{$portfolio->image}} alt="Frocerie">
            <div class="hover-info">
              <h6>{{$portfolio->name}}</h6>
              <a class="cbp-singlePage" href={{$portfolio->ajax_link}}><i class="ion-link"></i></a> </div>
          </div>
        </div>

      @endforeach