我沒有記錄只是15000.而內存php配置爲使用128 MB。所以我得到這個錯誤。的134217728個字節Yii findAll()導致內存問題
允許的內存容量耗盡
有2種方式來處理這個問題。
我很困惑的是,如果我增加允許到256內存,有一天,當數據的數量爲30 000本錯誤將再次出現。
所以我應該不使用Yii cactiverecord findAll()當我開發大型應用程序時?或者隨着更多數據的進入,我應該不斷增加內存大小。
什麼是最佳方法?
我沒有記錄只是15000.而內存php配置爲使用128 MB。所以我得到這個錯誤。的134217728個字節Yii findAll()導致內存問題
允許的內存容量耗盡
有2種方式來處理這個問題。
我很困惑的是,如果我增加允許到256內存,有一天,當數據的數量爲30 000本錯誤將再次出現。
所以我應該不使用Yii cactiverecord findAll()當我開發大型應用程序時?或者隨着更多數據的進入,我應該不斷增加內存大小。
什麼是最佳方法?
嘗試使用批處理retrive數據:
http://www.yiiframework.com/doc-2.0/guide-db-active-record.html#data-in-batches
// fetch 10 customers at a time
foreach (Customer::find()->batch(10) as $customers) {
// $customers is an array of 10 or fewer Customer objects
}
// fetch 10 customers at a time and iterate them one by one
foreach (Customer::find()->each(10) as $customer) {
// $customer is a Customer object
}
// batch query with eager loading
foreach (Customer::find()->with('orders')->each() as $customer) {
// $customer is a Customer object with the 'orders' relation populated
}
使用'createCommand'與自定義查詢即;只抓取你需要的東西並使用索引。 – Criesto
這不是一個真正的解決大型模型陣列的問題,但你可以做的是用戶 - > select()只選擇你需要的數據,所以如果你想顯示一個名字,你不需要id,電子郵件excetra。比你可以做的是客戶:: find() - >選擇('名稱') - >所有() – Rickert
可能重複的[優化foreach數千項目](http://stackoverflow.com/questions/24284551/optimization對於成千上萬的項目) – topher