繁体   English   中英

Laravel Lighthouse中如何查询多个Pivot关系

[英]How to Query Multiple Pivot Relationship in Laravel Lighthouse

嗨,我是 laravel-lighthouse 的新手。 我已阅读文档,但不幸的是,没有关于此问题的详细信息。 我的问题是如何查询多个 pivot 表。 我有一个属于许多其他模型的项目表。 代码如下。

class Item extends Model
    {
        public function provisions(): BelongsToMany
        {
            return $this->belongsToMany(Pwmp::class,
                'project_wise_material_provision_items', 'item_id', 'provision_id')
                ->withPivot('qty', 'unit_cost')
                ->withTimestamps()
                ->as('provision_items');
        }
        public function procurements(): BelongsToMany
        {
            return $this->belongsToMany(Pwpp::class,
                'project_wise_procurement_plan_items', 'item', 'procurement')
                ->withTimestamps()
                ->as('procurement_items')
                ->withPivot('qty', 'unit_cost');
        }
    
        public function log_sheets(): BelongsToMany
        {
            return $this->belongsToMany(Braols::class,
                'bid_receiving_and_opening_log_sheet_items', 'item', 'braols')
                ->withTimestamps()
                ->as('log_sheet_items')
                ->withPivot('qty', 'unit_cost', 'tax');
        }
        public function workshop(): BelongsToMany
        {
            return $this->belongsToMany(TransformerWorkshop::class,
                'transformer_workshop_items', 'item', 'workshop')
                ->as('workshop_items')
                ->withTimestamps()
                ->withPivot('qty', 'flow', 'type');
        }
        public function sub_office(): BelongsToMany
        {
            return $this->belongsToMany(MaterialReceiptInSubOffice::class,
                'material_receipt_in_sub_office_items', 'item', 'receipt')
                ->as('sub_office')
                ->withTimestamps()
                ->withPivot('id','qty', 'type');
        }

这是我的 GraphQL 模式

type Item{
        id: ID!
        workshop_items: [TransformerWorkShopItemsPivot]
        provision_items: [ProjectWiseMaterialProvisionItem]
        sub_office: MaterialReceiptInSubOfficeItemsPivot
    }
    
    type MaterialReceiptInSubOfficeItemsPivot{
        qty: Int
        type: Int
        id: ID
    }
    
    type ProjectWiseMaterialProvisionItem {
        qty: String
        unit_cost: String
    }
    type TransformerWorkShopItemsPivot{
        qty: Int
        type: Int
        flow: Int
    }
    

现在当我查询 api

```graphql material_receipt_in_sub_office_store(id: 4){ id items{ id provision_items{ unit_cost qty } sub_office{ type id qty } } } } ``` 它返回以下结果
{ "data": { "material_receipt_in_sub_office_store": { "id": "4", "items": [ { "id": "431", "name": "Drill Machine", "image": "crane2.jpg", "category_id": { "id": "993" }, "provision_items": null, "sub_office": { "type": null, "id": null, "qty": null, "__typename": "MaterialReceiptInSubOfficeItemsPivot" } },

我无法获取多个 pivot 表数据。 但是,如果我查询 pivot 它只返回一个 pivot 的数据。

首先,您似乎没有在类型定义中使用 Laravel 模型的关系。

通过指定 @belongsToMany / @hasMany 指令( 在此处查看更多内容),您将能够优化您的查询。

type Item{
    id: ID!
    workshop_items: [TransformerWorkShopItemsPivot] @hasMany(relation: "workshop")
    provision_items: [ProjectWiseMaterialProvisionItem] @hasMany(relation: "provisions")
    sub_office: MaterialReceiptInSubOfficeItemsPivot @hasMany
}

我只是不确定你在你的关系定义中给表别名的事实..

然后,通过查询,您可以获取任意多的 pivot 关系。 这样做从来没有遇到关系问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM