Сохранить данные в таблицу ассоциаций (belonsToMany) Cakephp 3 - PullRequest
0 голосов
/ 06 июня 2018

У меня есть Кампании и Действия.Каждая кампания может иметь неограниченные действия (даже может повторяться).

В документации Cakephp говорится, что вы можете сохранить ассоциацию с помощью actions._ids, но у меня есть проблема с этим.У каждой кампании_действия есть продолжительность.Затем, если я использую actions._ids, я могу сохранить отношения без проблем, но не могу сохранить длительность в каждой кампании campaign_duration.

Теперь я сохраняю ширину данных actions._joinData.action_id и actions._joinData.duration иработает!но проблема в том, что cakephp создает новое действие и сохраняет мне связь с созданным новым действием.Пример:

Мне нужно сохранить в кампании 1 идентификаторы действий 3 и 5 шириной 25 секунд и 40 секунд соответственно.

Вставка в BBDD должна быть campaign_id 1 - action_id 3 - duration 25 и campaign_id1 - action_id 5 - длительность 40. Теперь с _joinData это спасает меня: новый идентификатор ширины действия 8 (например) и новый идентификатор ширины действия 9 (например), а в Campaign_action 1: action_id 1 - action_id 8 - продолжительность 25 и campaign_id 1- action_id 9 - продолжительность 40

Как я могу это сделать?

Должен ли я сделать это вручную без торта?

Спасибо.

Редактировать:

Это мои данные для сохранения (только действия):

 "actions" => array:1 [▼
    0 => array:1 [▼
      "_joinData" => array:3 [▼
        "campaign_action_name" => "A"
        "action_id" => "3"
        "duracion" => "4"
      ]
    ]
  ]

И это мой результат:

   "actions": array:1 [▼
    0 => Action {#236 ▼
      +"_joinData": CampaignsAction {#266 ▼
        +"campaign_action_name": "A"
        +"action_id": 3
        +"duracion": 4.0
        +"[new]": true
        +"[accessible]": array:6 [▶]
        +"[dirty]": array:3 [▶]
        +"[original]": []
        +"[virtual]": []
        +"[errors]": []
        +"[invalid]": []
        +"[repository]": "CampaignsActions"
      }
      +"[new]": true     // HERE IS THE PROBLEM I THINK
      +"[accessible]": array:21 [▶]
      +"[dirty]": array:1 [▶]
      +"[original]": []
      +"[virtual]": []
      +"[errors]": []
      +"[invalid]": []
      +"[repository]": "Actions"
    }
  ]

1 Ответ

0 голосов
/ 06 июня 2018

Я думаю, что ваша структура данных до внесения исправлений должна выглядеть примерно так:

actions => [
    0 => [
        id  => 3,
        _joinData => [
            duration => 40,
        ],
    ],
    1 => [
        id  => 5,
        _joinData => [
            duration => 25,
        ],
    ],
]

Попробуйте исправить объект вашей кампании с помощью таких данных;если это не сработает, обновите вопрос точными данными, с которыми вы вносите исправления, и полученной сущностью.

...