【发布时间】: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
];
}
}
【问题讨论】:
标签: laravel-5 eloquent laravel-5.6 laravel-resource