2015-06-22 49 views
0

我想更新/保存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被標記爲髒時,它實際上是乾淨的任何想法呢?

回答

0

當U修補了一些數據的實體它會自動標記爲髒

$tradingPartners->patchEntities($currentTradingPartners, $partners); 

這意味着你正在更新$ currentTradingPartners與$夥伴的數據,以便$ currentTradingPartners被修改,並標記爲髒。

如果你想要原始數據,你可以在你的實體屬性上使用getOriginal方法,你也可以使用clean方法去除髒標誌。

如果你長了問題,修補與關聯實體ü必須通過選項patchEntity數組:

$article = $articles->get(1); 
$articles->patchEntity($article, $this->request->data(), [ 
    'associated' => ['Tags', 'Comments.Users'] 
]); 
相關問題