首页 > 解决方案 > 在 Fractal 的 Transformers 中包含来自数据透视表的相关表

问题描述

在我的 Laravel 项目中,我有 4 个表:

location_product 是 location 和 product 之间的中间表,它有一个status指向该product_status表的外键。

我正在使用 Fractal 的转换器来转换我的模型:

    //Filter the products
    $products = $location->products()->unarchived()->get();

    return $this->response()->collection($products, new ProductDetailsTransformer());

在我的ProductDetailsTransformer.php中,我想使用 '''defaultIncludes''' 包含来自中间表的状态:

/**
 * List of resources to automatically include
 */
protected $defaultIncludes = [
    'status',
];

public function includeStatus(Product $product) {
    return $this->item($product->pivot->status, new ProductStatusTransformer());
}

但我收到一个

调用模型 [App\Models\Product] 上的未定义关系 [status]。

如何使用 Fractal 的转换器正确包含状态表?

目前,我正在使用以下内容:

public function transform(Product $product) {
    return [
        'id' => (int)$product->id,
        'name' => $product->name,
        'amount' => $product->pivot->amount,
        'delivery_on_site' => (bool)$product->pivot->delivery_on_site,
        'status' => [
            'id' => $product->pivot->status->id,
            'name' => $product->pivot->status->name
        ]
    ];
}

但如果状态可能的话,我想使用变压器。

标签: laravelthephpleague-fractal

解决方案


推荐阅读