首页 > 解决方案 > 在关系方法中无法访问父枢轴属性

问题描述

有 3 种模型:订单、产品和价格

每个Order有很多Products,每个Product都有一个Price取决于Orderprice_group_id字段。

class Order extends Model
{
    public function products() {
        return $this->belongsToMany(Product::class)->withPivot(['quantity']);
    }
}

class Product extends Model
{
    public function price() {
        return $this->hasOne(Price::class)->where('price_group_id', '=', $this->pivot->pivotParent->price_group_id);
    }
}

价格模型有id、product_id、price_group_idvalue字段。

我使用$this->pivot->pivotParent在Product模型中检索Orderprice_group_id属性,它在 Laravel 中运行良好,但它不适用于 Lighthouse 查询:“尝试获取非对象的属性 'pivotParent'”。似乎根本没有枢轴和枢轴父母。

有没有办法获得父枢轴属性或其他方式来实现这种关系?

GraphQL 模式的一部分:

type Query {
    orders: [Order!]! @all
    order(id: ID! @eq): Order @find
}

type Order {
    id: ID!
    price_group_id: ID!
}

type Product {
    id: ID!
    price: Price @hasOne
}

type Price {
    id: ID!
    value: Float!
    price_group_id: ID!
}

标签: laraveleloquentgraphqllaravel-lighthouse

解决方案


我尝试了一些方法来解决这个问题,包括访问器而不是关系方法。pivotParent 返回 null,但我可以访问 pivot!所以我可以通过这种方式获得 price_group_id 和相对价格:

public function getPriceAttribute() {
    return $this->hasOne(Price::class)->where('price_group_id', Order::find($this->pivot->order_id)->price_group_id)->first()->value;
}

产品架构:

type Product {
    id: ID!
    price: Float
}

推荐阅读