如何在Cake 3.0中保存belongsToMany数据?

时间:2015-08-19 21:14:48

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

我是cakephp的新手。对于像我这样的初学者来说,http://book.cakephp.org/3.0/en/orm/associations.html#belongstomany-associationshttp://book.cakephp.org/3.0/en/orm/saving-data.html#saving-with-associations的文档似乎过于简短或非常先进。

据我所知,我做了以下事情。

//Table Baskets belongsToMany Apples
//At BasketsTable.php in initialize()
$this->belongsToMany('Apples',[
            'joinTable' => 'apples_baskets'
        ]);

MySQL中的连接表apples_baskets

+---+---------+----------+
|id |apple_id |basket_id |
--------------------------
|   |         |          |
--------------------------

我已将发布请求数据显示在控制器上:

Array
(
    [id] => 1
    [xyz] => blahblah
    [apples] => Array
        (
            [_ids] => Array
                (
                    [0] => 1
                )

        )

    [amount] => 15000
)

现在,当我执行save时,只更新Baskets表,连接表保持不变,并且不会抛出任何错误。

我知道我肯定错过了一些东西但却无法弄明白。请帮忙!!!

2 个答案:

答案 0 :(得分:3)

尝试检查您的Baskets实体类是否生成apples属性_accessible

<?php
namespace app\Model\Entity;

use Cake\ORM\Entity;

class Basket extends Entity {
    public $_accessible = [
        'apples', // <-- make sure this is present
    ];
}

使用这些新的Entity类尝试使用Table::newEntity()Table::patchEntity()加载它们时,这是一个很常见的问题,但是其中一些数据实际上并没有保存到实体中质量分配保护。

参考:http://book.cakephp.org/3.0/en/orm/entities.html#mass-assignment

答案 1 :(得分:2)

请看这里:http://book.cakephp.org/3.0/en/orm/saving-data.html#saving-belongstomany-associations

尝试设置$basket->dirty('apples', true);。这应该告诉蛋糕,这里需要照顾的是未保存的协会。