Laravel 5.6 API 资源未显示关系数据
Posted
技术标签:
【中文标题】Laravel 5.6 API 资源未显示关系数据【英文标题】:Laravel 5.6 API Resource not showing Relationship data 【发布时间】:2018-11-30 23:47:39 【问题描述】:我想在 laravel 5.6 中使用 Resource 将关系数据转换为 json
当我查询时,我得到response.data.created_by
作为一个对象。 (框内标记的第一个数据) (我需要使用 API 资源的这种功能)
但是对于API Resources,它仅在response.response.data.created_by
中显示id
而不是"created_by" object
。 (框内标记的第二个数据)
*数据差异在方框内标出。
*数据是使用 Eager fetch 获取的。
网址:http://localhost:8000/api/product/unit
回应:
UnitController.php:
命名空间 App\Http\Controllers\Product; 使用 App\Models\Product\Unit; 使用 Illuminate\Http\Request; 使用 App\Http\Controllers\Controller; 使用 Illuminate\Support\Facades\Validator; 使用 App\Http\Resources\Product\UnitResourceCollection; 使用 App\Http\Resources\Product\UnitResource; 使用 Illuminate\Validation\ValidationException; 类 UnitController 扩展控制器 公共函数索引() $units = Unit::with(['created_by', 'updated_by'])->get(); +-------------------------------------------------- -----+ |返回[ | | '数据' => $units, | | '资源' => 新的 UnitResourceCollection($units) | |]; | +-------------------------------------------------- -----+单元模型:
命名空间应用\模型\产品; 使用 Illuminate\Database\Eloquent\Model; 类单元扩展模型 公共函数 created_by() return $this->belongsTo('App\User', 'created_by', 'id'); 公共函数updated_by() return $this->belongsTo('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),
【讨论】:
以上是关于Laravel 5.6 API 资源未显示关系数据的主要内容,如果未能解决你的问题,请参考以下文章
将 Laravel 从 5.6 升级到 6.0 后,调用未定义的 str_random() 函数不起作用
多个 Laravel Eloquent 关系未显示来自所有关系的数据