我收到此错误
允许的内存大小为 134217728 字节耗尽(尝试分配 84 字节( /url/Doctrine/ORM/Internal/Hydration/AbstractHydrator.php 271
我已经测试了一段时间,但是每当 $data1
和 $data2
之间的范围太大时就会出现错误,但我仍然认为查询对服务器来说应该不会那么难,所以我怀疑我实际上在查询构建器上做错了什么。现在,我通过仅过滤日期和单个商务来重现错误。
function getTicketsList($tpv, $salesman, $customer, $data1, $data2){
if(count($tpv)==1){
$tpv = array($tpv);
}
$qb = $this->createQueryBuilder('t');
$qb
->select('t.id_tickets', 't.ticket_code', 's.name AS seller', 'c.name AS customer', 'c.surnames AS customer_s',
't.created_client_date', 't.comment', '(t.total_amount - t.total_net_amount) AS tax_amount', 't.total_amount', 't.discount','c.email AS customer_email')
->join('EntitySeller', 's', 'WITH', 's = t.seller')
->leftJoin('EntityCustomer', 'c', 'WITH', 'c = t.customer')
->distinct();
$filter = $qb->expr()->andx();
if($salesman){
$filter->add(
$qb->expr()->eq('t.seller','?1'));
$qb->setParameter(1, $salesman);
}
else{
$filter->add(
$qb->expr()->in('t.tpv', ':tpv_id'));
$qb->setParameter('tpv_id', $tpv);
}
if($customer){
$filter->add(
$qb->expr()->eq('t.customer','?2'));
$qb->setParameter(2, $customer);
}
if($data1){
$filter->add(
$qb->expr()->gte('t.created_client_date', ':small_date'));
$qb->setParameter('small_date', $data1);
}
if($data2){
$filter->add(
$qb->expr()->lte('t.created_client_date', ':big_date'));
$qb->setParameter('big_date', $data2);
}
$qb->where($filter);
$result = $qb->getQuery()->getResult();
return $result;
}
是否有人注意到我的查询构建器功能中的一些错误、不良做法或有一些改进性能的建议?
在第 271 行之前添加以下代码:
ini_set('memory_limit', '2048M');
它会暂时将您的 php memory_limit设置为 2048M。