2015-10-14 63 views
0

我保存了大量的數據(模型中有很多模型嵌套不同類型的關聯)。我從外部Web服務得到這個數據和馬歇爾之後我試圖挽救與交易:CakePHP 3.x Transacction - 沒有足夠的RAM

$this->connection()->transactional(function() use ($entities) { 
    foreach ($entities as $entity) { 
     $this->save($entity); 
    } 
}); 

我目前遇到的probleam是我的PHP進程正在運行內存不足。我的php.ini配置爲128M。

是否有可能在不使用事務處理的情況下減少保存實體的數據的負載?

謝謝。

+0

您試圖通過單個事務刷新未知數量的記錄 - 這種情況出於多種原因並不好,其中一個原因是內存不足。更明智的做法是在單筆交易中刷新10,50或100條記錄。基本上:分成多次交易並分批發送10,50,100(或者用數字進行實驗以擊中甜點)。 – Mjh

+0

嗨@Mjh,我怎麼能從CakePHP 3.x視圖來處理這個問題?你能否提供一個示例或鏈接到文檔,可以解釋我如何分割它?我會嘗試在沒有交易的情況下保存,只是在正常情況下。 – Tzaoh

+0

您的'$ entities'是一組數據。循環瀏覽它,將其分成50個記錄,並使用您在問題中發佈的代碼。 – Mjh

回答

0

即使您已循環:

foreach ($entities as $entity) { 
     $this->save($entity); 
} 

$實體可能仍然包含了大量的信息,從而填補了內存問題。您可能會回顯或使用var_dump,看看是否可以讓$ entity進一步分解,並在當前foreach中有一個嵌套循環。