Практический способ возвращать только выбранные столбцы в методе Laravel in

#laravel

Вопрос:

Я сомневаюсь (жизнь младшего разработчика), что было бы наиболее практичным способом возвращать значение только из определенного столбца в Laravel записи базы данных.

Пример метода контроллера:

 public function show(ProductsCategory $category)
{ 
   return $category;
}
 

Это выводит все столбцы, например

 {"id":104,"category_name":"Soft drinks","created_at":"2021-06-09T17:16:54.000000Z","updated_at":"2021-06-09T17:16:54.000000Z"}
 

Однако то, что мне нужно, — это просто category_name перенастроить колонку, вот так

 {"category_name":"Soft drinks"}
 

Я могу добиться этого, сделав

     public function show($id)
    { 
       $category = ProductsCategory::select('category_name')->findOrFail($id);

       echo json_encode($category)
       exit;
    }
 

Однако сомневаетесь, будет ли это наиболее практичным способом? Есть ли более элегантный/прямой путь? Или я сильно переоцениваю это?

Ответ №1:

Я думаю, что это выбор разработчика . Один из способов выбрать столбец, как вы упомянули .Другой способ, как показано ниже

  $category = ProductsCategory::findOrFail($id,['category_name']);
 

По умолчанию findOrFail($id, $columns = ['*']) возвращаются все столбцы, о которых они упоминали *

Также вместо json_encode того,чтобы использовать json, вы можете напрямую возвращать $category

Также, если вы хотите передать пользовательские заголовки или код состояния, вы можете вернуться, как показано ниже

  return response()->json($category)
 

Вот параметры метода json

  /**
     * Create a new JSON response instance.
     *
     * @param  mixed  $data
     * @param  int  $status
     * @param  array  $headers
     * @param  int  $options
     * @return IlluminateHttpJsonResponse
     */
    public function json($data = [], $status = 200, array $headers = [], $options = 0);
 

Ответ №2:

Если вы хотите получить полный контроль над возвращаемым ресурсом, вам следует использовать ресурсы API.

Чтобы создать файл ресурсов, выполните: php artisan make:resource ProductsCategoryResource

В файле ресурсов вы можете определить поля для возврата, т. Е. только в том случае, если вам это нужно id , и name вы делаете это:

 <?php

namespace AppHttpResources;

use IlluminateHttpResourcesJsonJsonResource;

class ProductCategoryResource extends JsonResource
{
    public function toArray($request)
    {
        return [
            'id' => $this->id,
            'name' => $this->name,
        ];
    }
}
 

Затем установите ответ в контроллере:

 public function show($id)
{ 
  $category = ProductsCategory::select('id', 'name')->findOrFail($id);
  return new ProductCategoryResource($category);
}
 

Вы также можете вернуть коллекцию ресурсов:

 public function index()
{ 
  $categories = ProductsCategory::select('id', 'name')->get()l
  return ProductCategoryResource::collection($category);
}
 

Я думаю, что это действительно элегантный и организованный способ.