3 回答

TA貢獻(xiàn)1757條經(jīng)驗(yàn) 獲得超7個(gè)贊
此問(wèn)題現(xiàn)在似乎已修復(fù)。我在拉拉維爾7.0中遇到了這個(gè)問(wèn)題。更新到7.20,我不再耗盡內(nèi)存,甚至下降到32M的內(nèi)存限制。

TA貢獻(xiàn)1825條經(jīng)驗(yàn) 獲得超4個(gè)贊
您可以增加內(nèi)存限制 php.ini
ini_set('memory_limit','160M'); or memory_limit = 2024M

TA貢獻(xiàn)1842條經(jīng)驗(yàn) 獲得超22個(gè)贊
我發(fā)現(xiàn)問(wèn)題在于 laravel 獲取分頁(yè)結(jié)果的記錄總數(shù):
public function paginate($perPage = null, $columns = ['*'], $pageName = 'page', $page = null)
{
...
$total = $this->toBase()->getCountForPagination()
...
}
protected function runPaginationCountQuery($columns = ['*'])
{
return $this->cloneWithout($without)->cloneWithoutBindings($this->unions ? ['order'] : ['select', 'order'])->setAggregate('count', $this->withoutSelectAliases($columns))->get()->all();
}
通常,最后一種方法運(yùn)行分頁(yè)CountRy為了獲取記錄計(jì)數(shù)而創(chuàng)建對(duì)數(shù)據(jù)庫(kù)的原始查詢,如下所示:
選擇 count(*) 作為從左聯(lián)接開(kāi)始的聚合。= .左聯(lián)接上 ...lotstenderstendersidlotstender_idcustomerslotscustomer_id
但是使用groupBy在查詢中而不是一行,總計(jì)數(shù)我得到了420650行,每行一行!它是足夠大的數(shù)組,創(chuàng)建只是為了獲取行數(shù),在我的情況下,這是完成內(nèi)存的原因。
我知道groupBy對(duì)于大數(shù)據(jù)不是一個(gè)好的決定,我對(duì)我的代碼進(jìn)行了重構(gòu),以從我的查詢中撤消groupBy。但事實(shí)上,在我看來(lái),這并不是你可能預(yù)料到的正常的拉拉維爾行為。
- 3 回答
- 0 關(guān)注
- 119 瀏覽
添加回答
舉報(bào)