cakephp 3保存空的belongsToMany关系

时间:2017-09-14 09:35:02

标签: cakephp cakephp-3.0 has-and-belongs-to-many cakephp-3.4

我有Shops表,可以有Products。其他商店可以使用相同的商品,因此我使用了belongsToMany关系表ShopsProducts

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

这是带有产品的商店表单中的请求。

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' => '',
]

处理此问题的方法是什么?

2 个答案:

答案 0 :(得分:1)

你的保存策略是什么?

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

尝试使用replace代替append

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

答案 1 :(得分:0)

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

$shops->products = [];

$shops->setDirty('products ', true);