1

我有一张Shops可以有的桌子Products。其他商店可以有相同的产品,所以我使用了belongsToMany关系表ShopsProducts

我可以将无限数量的产品添加到商店并通过保存包含关系的商店实体来删除它们。一切正常,但如果我想在我的表单中取消所有产品与商店的链接并保存,则关系是空的,因此商店将始终有 1 个产品,我无法通过关系删除,只能直接删除。

这是带有产品的 Shops 表单中的请求的样子

data => [
    'name' => 'some',
    'is_active' => '1',
    'slug' => 'some',
    'product_id' => '',
    'products' => [
        (int) 5 => [
            'id' => '5',
            '_joinData' => [
                'priority' => '0'
            ]
        ]
    ],
]

这是没有的要求

data => [
    'name' => 'some',
    'is_active' => '1',
    'slug' => 'some',
    'product_id' => '',
]

处理这个问题的蛋糕方法是什么?

4

2 回答 2

1

你的保存策略是什么?

https://book.cakephp.org/3.0/en/orm/saving-data.html#saving-belongstomany-associations

尝试replace代替append.

如果这对您不起作用,请检查 before() 或 afterSave() 如果 products->get('products') 为空,如果它是手动调用该产品连接表上的 deleteAll() 商店.

于 2017-09-14T12:25:44.233 回答
0

您需要将关联设置为 [] 以将其清除。

$shops->products = [];

$shops->setDirty('products ', true);
于 2020-07-16T18:18:30.920 回答