Я новичок в 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'
]);
Стол соединения apples_baskets
в MySQL:
+---+---------+----------+
|id |apple_id |basket_id |
--------------------------
| | | |
--------------------------
Я сделал данные запроса поста, чтобы появиться на контроллере как:
Array
(
[id] => 1
[xyz] => blahblah
[apples] => Array
(
[_ids] => Array
(
[0] => 1
)
)
[amount] => 15000
)
Теперь, когда я выполняю save
только таблица корзины обновляется, таблица соединения остается нетронутой, и не выдается никакой ошибки.
Я знаю, что наверняка что-то упустил, но не могу понять. Пожалуйста помоги !!!
Попробуйте проверить, что ваш 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()
), но некоторые из этих данных фактически не сохраняются в сущности из-за защиты от массовых назначений.
Ref: http://book.cakephp.org/3.0/en/orm/entities.html#mass-assignment
Смотри сюда: http://book.cakephp.org/3.0/en/orm/saving-data.html#saving-belongstomany-associations
Попробуйте установить $basket->dirty('apples', true);
, Это должно сказать, что здесь есть несохраненные ассоциации, о которых нужно заботиться.