0

I have Campaigns and Actions. Each Campaign can has unlimited actions (even can be repeated).

Cakephp documentation say you can save the asociation with actions._ids but I have a problem with this. Each campaign_action has a duration. Then if I use actions._ids I can save the relationship without problems but I can't save duration in each campaign_duration.

Now I am saving data width actions._joinData.action_id and actions._joinData.duration and it works! but the problem is that cakephp creates a new action and save me the relation with the new action created. Example:

I need save in campaign 1 the actions ids 3 and 5 width 25 seconds and 40 seconds respectively.

The insertion in BBDD should be campaign_id 1 - action_id 3 - duration 25 and campaign_id 1 - action_id 5 - duration 40. Now with _joinData, it saves me: new action width id 8(for example) and new action width id 9(for example) and in campaign_actions: campaign_id 1 - action_id 8 - duration 25 and campaign_id 1 - action_id 9 - duration 40

How can I do this?

Would I have to do it manually without cake?

Thanks.

Edit:

This is my data to save (only actions):

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

And this is my result entity:

   "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"
    }
  ]
Sergioh Lonet
  • 831
  • 1
  • 7
  • 9

1 Answers1

1

I think your data structure prior to patching should look something like this:

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

Try patching your campaign entity with data like this; if it doesn't work, update the question with the exact data you're patching with and the resulting entity.

Greg Schmidt
  • 5,010
  • 2
  • 14
  • 35
  • I have another problem, If I have two actions with same id but different duration, It saves me only the last action: actions => [ 0 => [ id => 3, _joinData => [ duration => 40, ], ], 1 => [ id => 5, _joinData => [ duration => 25, ], ], 2 => [ id => 3, _joinData => [ duration => 30, ], ], ] It removes actions[0] – Sergioh Lonet Jun 13 '18 at 17:33
  • A new problem should be posted as an entirely new question. – Greg Schmidt Jun 13 '18 at 17:34