HABTM With 3 keys

Hello, I’m new here and need some help about cakephp 3 and HABTM,
I need to save 3 foreign keys in pivot table “gruposusuarios_menus”.

The code below work but when the user change the logged company “empresa_id” and update the group (gruposuuario) all records about the last company (empresa_id=1) are deleted and save the new company “empresa_id = 11”.

Thanks.

gruposusuarios
±—±----------------+
| id | nome |
±—±----------------+
| 1 | Administradores |
| 7 | Financeiro |
±—±----------------+

menus
±—±-------------------------------------+
| id | menu |
±—±-------------------------------------+
| 1 | Cadastros |
| 2 | CadastrosGeral |
| 3 | CadastrosVincular |
±—±-------------------------------------+

empresas
±—±-----------------+
| id | nome |
±—±-----------------+
| 1 | Empresa 1 |
| 11 | Empresa 2 |
±—±-----------------+

gruposusuarios_menus
±----±-----------±---------±--------+
| id | empresa_id | grupo_id | menu_id |
±----±-----------±---------±--------+
| 1 | 1 | 1 | 1 |
| 2 | 1 | 1 | 2 |
| 3 | 1 | 1 | 3 |
| 4 | 11 | 7 | 1 |
| 5 | 11 | 7 | 2 |
±----±-----------±---------±--------+

class GruposUsuariosTable extends Table
{

	$this->belongsToMany('Menus', [
			'foreignKey' => 'grupo_id',
			'targetForeignKey' => 'menu_id',
			'joinTable' => 'gruposusuarios_menus',
			'through' => 'GruposUsuariosMenus'
	]);

}

class MenusTable extends Table
{

	$this->belongsToMany('GruposUsuarios', [
			'foreignKey' => 'menu_id',
			'targetForeignKey' => 'grupo_id',
			'joinTable' => 'gruposusuarios_menus',
			'through' => 'GruposUsuariosMenus'
	]);

}

class GruposUsuariosMenusTable extends Table
{

	$this->belongsTo('GruposUsuarios', [
			'foreignKey' => 'grupo_id',
			'joinType' => 'INNER'				
	]);
	
	$this->belongsTo('Menus', [
			'foreignKey' => 'menu_id',
			'joinType' => 'INNER'
	]);
	
	$this->belongsTo('Empresas', [
			'foreignKey' => 'empresa_id',
			'joinType' => 'INNER'
	]);

}

class GruposUsuariosController extends AppController
{
public function edit($id = null)
{

	...

	if ($this->request->is(['patch', 'post', 'put'])) {
		
		// GERA ARRAY DE USUARIOS PARA GRAVAR MULTIPLOS RELACIONAMENTOS
		$users_ids = $this->request->data['users'];
		foreach ($users_ids as $i=>$value) {
			$this->request->data['users'][$i] = array('id'=> $value);
		}
		
		
		// GERA ARRAY DE MENUS PARA GRAVAR MULTIPLOS RELACIONAMENTOS
		if (!empty($this->request->data['menus'])) {
			
			$menus_ids = $this->request->data['menus'];
			foreach ($menus_ids as $i=>$value) {
				$this->request->data['menus'][$i] = [
						'id' => $value,
						'_joinData' => [
							//'grupo_id'=>$id,
							//'menu_id'=>$value,
							'empresa_id'=>$this->request->data['empresa_id']									
						]
				];
			}
			
		} else {
			$this->Flash->error(__('Nenhuma permissão selecionada. Favor verificar.'));
			$ErrosLocais = array();
			array_push($ErrosLocais, array('Permissões'=>'Nenhuma permissão selecionada. Favor verificar.'))	;

		}
		
		// VALIDAÇÃO
		$grupo = $this->GruposUsuarios->patchEntity($grupo, $this->request->data, [
				'associated' => [
						'Users' => [
							'validate' => false
						],
						'Menus' => [
							'validate' => false
						],
						'Empresas'
				]
		]);
		
		if (!$grupo->errors() && !$ErrosLocais) {
			 
			// SALVA CLIENTE
			if ($this->GruposUsuarios->save($grupo)) {				 
				 
				$this->Flash->success(__('Registro gravado com sucesso.'));
				return $this->redirect(['action' => 'index']);
				
			} else {
				
				$this->set('erros', $user->errors());
				$this->Flash->error(__('Não foi possivel gravar as informações. Por favor tente mais tarde.'));
			}

		} else {
			
			$this->set('erros', $grupo->errors());
			$this->Flash->error(__('Erros de validação'));
			
		}
		 
	}
}