我是cakephp的新手。对于像我这样的初学者来说,http://book.cakephp.org/3.0/en/orm/associations.html#belongstomany-associations和http://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表,连接表保持不变,并且不会抛出任何错误。
我知道我肯定错过了一些东西但却无法弄明白。请帮忙!!!
答案 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);
。这应该告诉蛋糕,这里需要照顾的是未保存的协会。