hasMany有更多信息

时间:2019-07-02 11:24:35

标签: laravel laravel-5 eloquent

我想进行以下工作:

我有一个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 个答案:

答案 0 :(得分:3)

您可以添加具有列user_group_product_groupsuser_group_idproduct_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,它将包括数据透视表中的折扣。