首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用cakephp 3保存关联数据

使用cakephp 3保存关联数据
EN

Stack Overflow用户
提问于 2016-02-03 03:14:29
回答 1查看 176关注 0票数 0

我在尝试修补实体时遇到了一个问题。我的$this->request->data看起来像这样:

代码语言:javascript
复制
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);)之后,我得到了一个奇怪的行为:"sistemas“数组看起来没问题,但是"localidades”数组的内容没有被修补。下面是我的$unidade的转储:

代码语言:javascript
复制
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"
}

所以我的"sistemas“得到了很好的修补,但我的"localidades”却没有。它们在我的表类中看起来都很相似。下面是我的UnidadesTable.php文件的一部分:

代码语言:javascript
复制
$this->belongsToMany('Localidades', [
            'foreignKey' => 'unidade_id',
            'targetForeignKey' => 'localidade_id',
            'joinTable' => 'localidades_unidades'
        ]);
        $this->belongsToMany('Sistemas', [
            'foreignKey' => 'unidade_id',
            'targetForeignKey' => 'sistema_id',
            'joinTable' => 'sistemas_unidades'
        ]);

它们基本上是相同类型的关联(拥有并属于多个,都有中间表,包含一个id和两个外键)。那么,为什么他们的行为会有所不同呢?我如何调试它呢?

几乎忘了:这是我模型的一部分:

预先感谢=]

编辑:下面是我的SistemasTable和LocalidadesTable文件:

代码语言:javascript
复制
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

代码语言:javascript
复制
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;
}
EN

回答 1

Stack Overflow用户

发布于 2016-02-03 04:19:26

您在LocalidadesTable中没有belongsToMany('Unidades')

代码语言:javascript
复制
$this->belongsToMany('Unidades', [
    'foreignKey' => 'localidade_id',
    'targetForeignKey' => 'unidade_id',
    'joinTable' => 'localidades_unidades'
]);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35161958

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档