2016-07-22 9 views
0

私はJobsTableを持っている:CakePHPの3 hasManyの更新奇妙な行動

これは、関係の定義です:

$this->hasMany('JobContracts', [ 
    'foreignKey' => 'job_id' 
]); 

保存コード:

$entity = $this->patchEntity($entity, $toSave, [ 
     'fieldList' => ['notes], 
     'associated' => [ 
      'JobContracts' => ['fieldList' => ['id', 'checked']] 
     ] 
    ]); 

そして今:
私はこれがでノート置く場合fieldList then JobContractsは正しく保存されません。
fieldListを削除すると、正しく保存することができます。

質問はなぜですか?私はベースモデルフィールドもコントロールする必要があります。助言がありますか?

アイブ氏はすでに確認:http://book.cakephp.org/3.0/en/orm/saving-data.html#avoiding-property-mass-assignment-attacks

+0

"正しく保存されていません"などの説明は避けてください。絶対に何かを意味する可能性があります。問題がCakePHPの内部を知っている人にとって明らかであっても、_exactly_が何を起しているか、そして何が起こるかについて常に可能な限り具体的にしてください。 – ndm

答えて

1

あなたは、あまりにもnotesだけでなく、関連のプロパティを割り当てることを可能にする必要があります。そうしないと、関連付けられたデータが結果のエンティティに決して設定されず、結果として保存されません。

あなたは再びリンクしたドキュメントをチェックし、タグの例は、まさにそれを示しています。だから、

// Only allow changing the title and tags 
// and the tag name is the only column that can be set 
$entity = $this->patchEntity($entity, $data, [ 
    'fieldList' => ['title', 'tags'], 
    'associated' => ['Tags' => ['fieldList' => ['name']]] 
]); 
$this->save($entity); 

http://book.cakephp.org/3.0/en/orm/saving-data.html#avoiding-property-mass-assignment-attacks

を、フィールドリストにjob_contractsを追加し、あなた良いべきである。