laravel - 在关系方法中无法访问父枢轴属性
问题描述
有 3 种模型:订单、产品和价格
每个Order有很多Products,每个Product都有一个Price取决于Order的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);
}
}
价格模型有id、product_id、price_group_id和value字段。
我使用$this->pivot->pivotParent在Product模型中检索Order的price_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!
}
解决方案
我尝试了一些方法来解决这个问题,包括访问器而不是关系方法。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
}
推荐阅读
- css - Material UI - 从其中一个文本字段中删除边框
- java - Jackson 不会将 Object 转换为 Json String
- android - 从android上的文件发送电子邮件
- flutter - 以两种语言提供第 3 方
- python - 当熊猫数据框超过 3GB 时 Pyarrow.flight.do_get 段错误
- julia - 如何在 Flux.jl 中提前停止
- python - scikit-learn 的 TransformedTargetRegressor 的分数是否正确?
- spring-boot-jpa - Spring Boot JPA 选择特定列结果应为 JSON 格式
- python - 如何将 datetime.timedelta 转换为数字?字段 'days' 需要一个数字,但得到了 datetime.timedelta
- python - 在python中使用BFS算法解决UVA问题