2016-02-02 5 views
0

У меня возникла проблема с попыткой исправить сущность. Моя $this->request->data выглядит следующим образом:Сохранение связанных данных с помощью cakephp 3

array:15 [▼ 
    "tipo_unidade_id" => "1" 
    "sistemas" => array:2 [▼ 
    0 => array:1 [▶] 
    1 => array:1 [▼ 
     "id" => "1" 
    ] 
    ] 
    "localidades" => array:1 [▼ 
    0 => array:1 [▼ 
     "id" => "2" 
    ] 
    ] 
    "status" => "1" 
] 

Но после того, как я пропатчить сущность ($unidade = $this->Unidades->patchEntity($unidade, $this->request->data);), я получаю странное поведение: Массив «Системас» выглядит нормально, но содержимое «localidades» массив не исправлен , Ниже дамп моего $ unidade:

Unidade {#115 ▼ 
    +"tipo_unidade_id": 1 
    +"sistemas": array:2 [▼ 
    0 => Sistema {#193 ▼ 
     +"id": 5 
     +"status": true 
     +"nome": "novoSissstema" 
     +"created": Time {#191 ▶} 
     +"modified": Time {#192 ▶} 
     +"[new]": false 
     +"[accessible]": array:1 [▶] 
     +"[dirty]": [] 
     +"[original]": [] 
     +"[virtual]": [] 
     +"[errors]": [] 
     +"[repository]": "Sistemas" 
    } 
    1 => Sistema {#190 ▶} 
    ] 
    +"localidades": array:1 [▼ 
    0 => Localidade {#173 ▼ 
     +"[new]": true 
     +"[accessible]": array:1 [▶] 
     +"[dirty]": [] 
     +"[original]": [] 
     +"[virtual]": [] 
     +"[errors]": array:3 [▼ 
     "id" => array:1 [▼ 
      "unique" => "The provided value is invalid" 
     ] 
     "status" => array:1 [▼ 
      "_required" => "This field is required" 
     ] 
     "nome" => array:1 [▼ 
      "_required" => "This field is required" 
     ] 
     ] 
     +"[repository]": "Localidades" 
    } 
    ] 
    +"status": true 
    +"[new]": true 
    +"[accessible]": array:1 [▶] 
    +"[dirty]": array:10 [▶] 
    +"[original]": [] 
    +"[virtual]": [] 
    +"[errors]": [] 
    +"[repository]": "Unidades" 
} 

Так мое «Системас» в настоящее время пропатчны nicelly, но не мой «localidades». Оба они выглядят одинаково в моих табличных классах. Вот часть моего файла UnidadesTable.php:

$this->belongsToMany('Localidades', [ 
      'foreignKey' => 'unidade_id', 
      'targetForeignKey' => 'localidade_id', 
      'joinTable' => 'localidades_unidades' 
     ]); 
     $this->belongsToMany('Sistemas', [ 
      'foreignKey' => 'unidade_id', 
      'targetForeignKey' => 'sistema_id', 
      'joinTable' => 'sistemas_unidades' 
     ]); 

Они в основном тот же тип объединения (имеет и принадлежит многим, как с посредническими таблицами, содержащий идентификатор и оба внешних ключей). Так почему они ведут себя по-другому? Как я могу отладить это?

Почти забыл: Это часть моей модели: my model

Заранее спасибо =]

редактировал: Там следует мой SistemasTable и LocalidadesTable файлы:

class SistemasTable extends Table 
{ 
public function initialize(array $config) 
    { 
    parent::initialize($config); 

    $this->table('sistemas'); 
    $this->displayField('nome'); 
    $this->primaryKey('id'); 

    $this->addBehavior('Timestamp'); 

    $this->hasMany('Mapas', [ 
     'foreignKey' => 'sistema_id' 
    ]); 
    $this->belongsToMany('Unidades', [ 
     'foreignKey' => 'sistema_id', 
     'targetForeignKey' => 'unidade_id', 
     'joinTable' => 'sistemas_unidades' 
    ]); 
} 
public function validationDefault(Validator $validator) 
{ 
    $validator 
     ->add('id', 'valid', ['rule' => 'numeric']) 
     ->allowEmpty('id', 'create') 
     ->add('id', 'unique', ['rule' => 'validateUnique', 'provider' => 'table']); 

    $validator 
     ->add('status', 'valid', ['rule' => 'boolean']) 
     ->requirePresence('status', 'create') 
     ->notEmpty('status'); 

    $validator 
     ->requirePresence('nome', 'create') 
     ->notEmpty('nome'); 

    return $validator; 
} 
public function buildRules(RulesChecker $rules) 
{ 
    $rules->add($rules->isUnique(['id'])); 
    return $rules; 
} 

LocalidadesTable.php

class LocalidadesTable extends Table 
{ 
public function initialize(array $config) 
{ 
    parent::initialize($config); 

    $this->table('localidades'); 
    $this->displayField('nome'); 
    $this->primaryKey(['id']); 

    $this->addBehavior('Timestamp'); 

    $this->belongsTo('Municipios', [ 
     'foreignKey' => 'municipio_id', 
     'joinType' => 'INNER' 
    ]); 
    //edited at 20160203 - 07:03 GMT-3 
    $this->belongsToMany('Unidades', [ 
     'foreignKey' => 'localidade_id', 
     'targetForeignKey' => 'unidade_id', 
     'joinTable' => 'localidades_unidades' 
    ]); 
    // 
} 
public function validationDefault(Validator $validator) 
{ 
    $validator 
     ->add('id', 'valid', ['rule' => 'numeric']) 
     ->allowEmpty('id', 'create') 
     ->add('id', 'unique', ['rule' => 'validateUnique', 'provider' => 'table']); 

    $validator 
     ->add('status', 'valid', ['rule' => 'numeric']) 
     ->requirePresence('status', 'create') 
     ->notEmpty('status'); 

    $validator 
     ->requirePresence('nome', 'create') 
     ->notEmpty('nome'); 

    return $validator; 
} 
public function buildRules(RulesChecker $rules) 
{ 
    $rules->add($rules->isUnique(['id'])); 
    $rules->add($rules->existsIn(['municipio_id'], 'Municipios')); 
    return $rules; 
} 
+0

localidades запрос данные не передаются проверки –

+0

Hi @NNem, спасибо за помощь мне! Да, это действительно странно. В обоих случаях я передаю только «id» ('sistemas' и' localidades'). Первая ассоциация правильно исправлена, полный объект извлекается в БД, нет ошибок. 'Localidades' ведут себя по-другому: он создает новый объект (« новый »: истинный), без данных и с ошибками проверки. –

ответ

0

Вы не имеют belongsToMany('Unidades') в LocalidadesTable

$this->belongsToMany('Unidades', [ 
    'foreignKey' => 'localidade_id', 
    'targetForeignKey' => 'unidade_id', 
    'joinTable' => 'localidades_unidades' 
]); 
+0

Возможно, вам придется удалить кеш в tmp dir. – avi

+0

Привет, спасибо за ответ! Я добавил атрибут attribToMany, очищенный кэш и перезапустил сервер торта, но, к сожалению, ничего не изменилось в отношении проблемы. –

Смежные вопросы