我想更新/保存TradingPartner實體(客戶和供應商),可以有多個地址相關聯(TradingPartnerAddresses)。CakePHP 3.0關聯被標記爲髒時,它實際上是乾淨
我有一個更改的TradingPartners數組,我使用Cake的patchEntities()函數來合併現有的記錄和修改過的記錄。
問題是Cake錯誤地將關聯的地址標記爲髒,並且在通過實體循環以保存它們時,它試圖重新插入現有地址 - 導致重複地址。
下面的代碼:
貿易伙伴的控制器
//Load the trading partners model
$tradingPartners = TableRegistry::get('TradingPartners');
//find all existing trading partners and their associated addresses
$currentTradingPartners = $tradingPartners->find('all')
->contain(['TradingPartnerAddresses']);
//Patch trading partner changes
//Cake automagically handles 1 level of associations
$patchedTpEntities = $tradingPartners->patchEntities($currentTradingPartners, $partners);
//loop through and save all dirty fields
foreach ($patchedTpEntities as $tpEntity) {
if ($tradingPartners->save($tpEntity)) {
} else {
//TODO
}
}
貿易伙伴的表
public function initialize(array $config) {
$this->primaryKey('partner_code');
$this->hasMany('TradingPartnerAddresses', [
'foreignKey' => 'partner_code'
]);
}
貿易伙伴地址表
public function initialize(array $config) {
$this->entityClass('App\Model\Entity\TradingPartnerAddress');
$this->belongsTo('TradingPartners', [
'foreignKey' => 'partner_code'
]);
}
debug($ patchedEtentites);
(int) 0 => object(App\Model\Entity\TradingPartner) {
.....
'trading_partner_addresses' => [],
'[new]' => false,
'[accessible]' => [
'*' => true
],
'[dirty]' => [
'trading_partner_addresses' => true
],
'[original]' => [],
'[virtual]' => [],
'[errors]' => [],
'[repository]' => 'TradingPartners'
爲什麼trading_partner_addresses被標記爲髒時,它實際上是乾淨的任何想法呢?