#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);
}
Я думаю, что это действительно элегантный и организованный способ.