【问题标题】:No access to parent pivot attributes in relationship method在关系方法中无法访问父枢轴属性
【发布时间】:2021-05-09 20:18:11
【问题描述】:

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

每个订单有很多产品,每个产品都有一个价格,它取决于订单price_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);
    }
}

Price 模型具有 id、product_id、price_group_idvalue 字段。

我使用 $this->pivot->pivotParentProduct 模型中检索 Orderprice_group_id 属性它在 Laravel 中运行良好,但不适用于 Lighthouse 查询:“尝试获取非对象的属性 'pivotParent'”。好像根本没有pivot和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!
}

【问题讨论】:

    标签: laravel eloquent graphql laravel-lighthouse


    【解决方案1】:

    我尝试了一些方法来解决这个问题,包括访问器而不是关系方法。 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
    }
    

    【讨论】:

    • 根据我的经验,将价格作为属性而不是单独的类/模型并不那么复杂。
    猜你喜欢
    • 2020-02-08
    • 2016-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-21
    • 1970-01-01
    • 1970-01-01
    • 2019-05-07
    相关资源
    最近更新 更多