Ресурс API Laravel 5.6 не показывает данные об отношениях
Я хочу получить данные отношений в JSON с помощью Resource в Laravel 5.6
Когда я запрашиваю, я получаю response.data.created_by
как объект. (первые данные отмечены в окошке) (мне нужна такая функциональность с использованием ресурсов API)
Но с ресурсами API это только показывает id
и не "created_by" object
в response.response.data.created_by
, (вторые данные отмечены в поле)
* Разница в данных отмечена внутри поля.
* Данные извлекаются с помощью нетерпеливого извлечения.
URL: http://localhost:8000/api/product/unit
Отклик:
{ "данные": [ { "id": 1, "единица измерения": "Метр", "символ": "м", "десятичный": 1, +----------------------------------------------------------------------------------+ |"creation_by": { | | "id": 1, | | "имя": "Админ", | | "электронная почта": "admin@gmail.com", | | "api_token": "$2y$10$.c7eJGS6x/C8JN9Hd.Qc1OgPUS8txMDuIHjZNBRRlHQVGrYbJcC5u", | | "creation_at": "2018-05-09 15:45:59", | | "updated_at": "2018-06-08 15:38:41" | |}, | +----------------------------------------------------------------------------------+ "updated_by": { "id": 1, "имя": "Админ", "электронная почта": "admin@gmail.com", "api_token": "$2y$10$.c7eJGS6x/C8JN9Hd.Qc1OgPUS8txMDuIHjZNBRRlHQVGrYbJcC5u", "creat_at": "2018-05-09 15:45:59", "updated_at": "2018-06-08 15:38:41" }, "creation_at": "2018-06-19 00:38:54", "updated_at": "2018-06-19 20:00:16" } ], "ресурс": { "данные": [ { "id": 1, "единица измерения": "Метр", "символ": "м", "десятичный": 1, +----------------+ |"создалБи": 1, | + ---------------- + "updatedBy": 1, "создан в": { "дата": "2018-06-19 00:38:54.000000", "timezone_type": 3, "часовой пояс": "Азия / Калькутта" }, "updatedAt": { "дата": "2018-06-19 20:00:16.000000", "timezone_type": 3, "часовой пояс": "Азия / Калькутта" } } ] } }
UnitController.php:
namespace App \ Http \ Controllers \ Product; используйте App\Models\Product\Unit; использовать Illuminate\Http\Request; использовать App\Http\Controllers\Controller; используйте Освещение \ Поддержка \ Фасады \ Валидатор; use App\Http\Resources\Product\UnitResourceCollection; используйте App\Http\Resources\Product\UnitResource; использовать Illuminate\Validation\ValidationException; класс UnitController extends Controller { public function index() { $units = Unit::with(['made_by', 'updated_by'])->get(); +------------------------------------------------------+ | возврат [ | | 'data' => $ единиц, | | 'resource' => new UnitResourceCollection($units) | |]; | +------------------------------------------------------+ } }
Модель блока:
Пространство имен App\Models\Product; использовать Illuminate\Database\Eloquent\Model; Модуль класса расширяет модель { публичная функция creation_by() { return $this-> ownTo('App\User', 'creation_by', 'id'); } публичная функция updated_by() { return $this-> ownTo ("App \ User", "updated_by", "id"); } }
UnitResource.php
<pre>
namespace App\Http\Resources\Product;
use App\Http\Resources\UserResource;
use Illuminate\Http\Resources\Json\JsonResource;
class UnitResource extends JsonResource
{
public function toArray($request)
{
return [
'id' => $this->id,
'unit' => $this->unit,
'symbol' => $this->symbol,
'decimal' => $this->decimal,
'createdBy' => $this->created_by,
'updatedBy' => $this->updated_by,
'createdAt' => $this->created_at,
'updatedAt' => $this->updated_at
];
}
}
1 ответ
Проблема была в модульной модели: мне пришлось использовать другое имя метода created_by()
чем имя столбца created_by
,
После изменения следующего кода он работает:
Unit.php
Модель:
public function created_by() {
-> public function createdby() {
public function updated_by() {
-> public function updatedby() {
UnitController.php
контроллер:
$units = Unit::with(['created_by', 'updated_by'])->get();
-> $units = Unit::with(['createdby', 'updatedby'])->get();
UnitResource.php
Ресурс:
'createdBy' => $this->created_by,
-> 'createdBy' =>new UserResource($this->createdby),
'updatedBy' => $this->updated_by,
-> 'updatedBy' => new UserResource($this->updatedby),