В Laravel, как я могу вернуть указанный c * столбец * из * таблицы * внутри моего контроллера API? Я использую Laravel 5 - PullRequest
0 голосов
/ 05 августа 2020

Вопрос

Как я могу вернуть указанный c столбец из таблицы [в контроллере API]? Я использовал pluck , но он удалил имя столбца из вывода. Мне также нужно указать имя столбца. Таблица $ product, на которую я ссылаюсь (упоминается в моем коде ниже), представляет собой просто таблицу с такими данными о продуктах, как название, цена, ставка скидки и т. Д. c ..

Краткое описание

Текущий пример ответа API -

{
   "data" : [
      "Graham",
      "Marina Philip",
      "David Doomer",
           ],
   "message" : "",
   "success" : true
}

Ожидаемый ответ -

[
  {
    "name": "Graham",
  },
  {
    "name": "Marina Philip",
  },  {
    "name": "David Doomer",
  },

]

Маршрут API от APIController:

Route::resource('searchlist', 'API\SearchlistAPIController');

Функция индекса из моего SearchlistAPIController. php [Specifi c function]

           public function index(Request $request)
            {
                try{
                    $this->productRepository->pushCriteria(new RequestCriteria($request));
                    $this->productRepository->pushCriteria(new LimitOffsetCriteria($request));
                    $this->productRepository->pushCriteria(new ProductsOfFieldsCriteria($request));
                    if($request->get('trending',null) == 'week'){
                        $this->productRepository->pushCriteria(new TrendingWeekCriteria($request));
                    }
                    else{
                        $this->productRepository->pushCriteria(new NearCriteria($request));
                    }

                    $products = $this->productRepository->all();
        
                } catch (RepositoryException $e) {
                    return $this->sendError($e->getMessage());
                }
    //Here i've got the value of the table $Product with a bunch of columns from my database..
        
                $sendinger = $products->pluck('name');    
 
   //I'm trying to filter the columns send here. But i lost the column name as well.            
                
               return $this->sendResponse($sendinger->toArray(),'');
            }

Содержание моего sendResponse метода:

public function sendResponse($result, $message) { return Response::json(ResponseUtil::makeResponse($message, $result)); }

Кроме того, как я могу удалить это из моего ответа Json? :

 "message" : "",
   "success" : true

1 Ответ

1 голос
/ 05 августа 2020

Я думаю, что $products->pluck('name')->toArray() вернет индексированный массив. Например, [ "Graham", "Marina Philip", "David Doomer" ]

Что вы могли бы сделать, это ...

$sendinger = $products->pluck('name')->map(function($name) {
    return [ 'name' => $name ];
});
                
return $this->sendResponse($sendinger->toArray(),'');

Подробнее о сопоставлении здесь: https://laravel.com/docs/7.x/collections#method -map

Not проверено, но должно направить вас в правильном направлении.

По вашему другому вопросу (удаление «успех» и «сообщение» из ответа) ...

Похоже, вы используете Laravel Generator ResponseUtil класс, который добавляет дополнительные параметры. См. Источник здесь: https://github.com/InfyOmLabs/laravel-generator/blob/7.0/src/Utils/ResponseUtil.php

Просто замените последнюю строку:

return $this->sendResponse($sendinger->toArray(),'');

на

return response()->json( $sendinger->toArray() );

, и это должно помочь !

...