hasMany с дополнительной информацией - PullRequest
1 голос
/ 02 июля 2019

Хотелось бы заставить работать следующее:

Я получил UserGroup, который должен иметь discounts в списке ProductGroups.

Пример:

UserGroup

{
    "data": {
        "id": 2,
        "title": "Test",
        "discounts": null,
    }
}

ProductGroups

{
  "data": [
    {
      "id": 1,
      "title": "Group1"
    },
    {
      "id": 2,
      "title": "Group2"
    }
  ]
}

Ожидаемый результат

UserGroup

{
  "data": {
    "id": 2,
    "title": "Test",
    "discounts": [
      {
        "productgroup_id": 1,
        "discount": 0
      },
      {
        "productgroup_id": 2,
        "discount": 10
      }
    ]
  }
}

Так что теперь я хотел бы знать: как сохранить это лучше? Сначала я подумал о JSON. Проблема: если ProductGroup удаляется, UserGroup - discounts -JSON не обновляется с помощью каскада.

1 Ответ

3 голосов
/ 02 июля 2019

Вы можете добавить сводную таблицу user_group_product_groups со столбцами user_group_id, product_groups_id и discount

В вашей ProductGroup модели добавьте

public function userGroups(){
    return $this->belongsToMany(UserGroup::class)->withPivot('discount');
}

В вашей UserGroup модели добавьте

public function productGroups(){
    return $this->belongsToMany(ProductGroup::class)->withPivot('discount');
}

Теперь вы можете использовать $productGroup->userGroups, и это будет включать скидку из сводной таблицы.

Или используйте $userGroup->productGroups, и он будет включать скидку из сводной таблицы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...