timacdonald / json-api

A lightweight API resource for Laravel that helps you adhere to the JSON:API standard. Supports sparse fieldsets, compound documents, and more.
579 stars 38 forks source link

Clarification for how to use with many to many #48

Open roarkmccolgan opened 8 months ago

roarkmccolgan commented 8 months ago

Hi All.

I am returning a collection of orders with their products (many to many) and each order can have the same product. I would like to know the pivot table data to know how many of the product was for each order.

However in relationships I only get the type "products" and the id.

In the included property, I only get one instance of that product and the pivot data (ordered_qty, received_qty etc) only relates to one of the orders.

I have 2 orders: SPR0004 and SPR0005 they both have a product chocolate croissant, how can I get the ordered qty of them for each order?

{
  "data": [
    {
      "id": "4",
      "type": "orders",
      "attributes": {
        "ref": "SPR00004",
        "status": "dispatched",
        "requested_delivery": "2024-01-25T06:23:40.000000Z",
        "created_at": "2023-07-13T22:23:40.000000Z"
      },
      "relationships": {
        "products": {
          "data": [
            {
              "type": "products",
              "id": "1"
            }
          ]
        },
      }
    },
    {
      "id": "5",
      "type": "orders",
      "attributes": {
        "ref": "SPR00005",
        "status": "dispatched",
        "requested_delivery": "2024-01-25T22:51:09.000000Z",
        "created_at": "2023-07-13T22:51:09.000000Z"
      },
      "relationships": {
        "products": {
          "data": {
            "0": {
              "type": "products",
              "id": "46"
            },
            "2": {
              "type": "products",
              "id": "1"
            }
          }
        },
      }
    }
  ],
  "included": [
    {
      "id": "1",
      "type": "products",
      "attributes": {
        "name": "Chocolate Croissant",
        "slug": "chocolate-croissant",
        "description": null,
        "order_id": 4,
        "ordered_qty": 2,
        "dispatched_qty": 0,
        "delivered_qty": 0
      }
    },
    {
      "id": "46",
      "type": "products",
      "attributes": {
        "name": "Prawn Rissoles",
        "slug": "prawn-rissoles",
        "description": null,
        "order_id": 5,
        "ordered_qty": 2,
        "dispatched_qty": 0,
        "delivered_qty": 0
      }
    }
  ],
  "jsonapi": {
    "version": "1.0"
  }
}

Thank you very much for your assistance!

lamouize-act commented 4 months ago

Hey, did you find a fix for this one? I have the same issue.

roarkmccolgan commented 4 months ago

Hi!

Unfortunately not, I ended up using Laravel built in resources very similar in implementation but found it easier to use. https://laravel.com/docs/11.x/eloquent-resources#generating-resources Thanks

Mohammed-Alama commented 2 months ago

@roarkmccolgan so u ends up with not using JsonApiResource for many-to-many relationships ??