我有一个用于日志的实体,我在其中保存应用程序错误记录,其中包含插入时间戳的字段。我的要求是清除从上次日志记录开始超过 10 天的条目。我的实体结构是这样的:
class MyacuvueLogs
{
/**
* @ORMId()
* @ORMGeneratedValue()
* @ORMColumn(type="integer")
*/
private $id;
/**
* @ORMColumn(type="string", length=255, nullable=true)
*/
private $mobile;
/**
* @ORMColumn(type="integer", nullable=true)
*/
private $created;
/**
* @ORMColumn(type="string", length=255)
*/
private $apiName;
/**
* @ORMColumn(type="string", length=255, nullable=true)
*/
private $apiReqParams;
}
请帮忙。
我删除旧日志记录的代码如下:
public function getOldLog($max_time)
{
$remove_rows = $this->createQueryBuilder('p')
->delete()
->where('p.created < :createdBeforeLimitDate')
->setParameter('createdBeforeLimitDate',$max_time-10*86400);
return "deleted rows";
}
但是,这是行不通的。
你有以下代码:
public function getOldLog($max_time)
{
$remove_rows = $this->createQueryBuilder('p')
->delete()
->where('p.created < :createdBeforeLimitDate')
->setParameter('createdBeforeLimitDate',$max_time-10*86400);
return "deleted rows";
}
该代码不执行任何内容,因为您刚刚构建了一个查询并将其存储在变量中。 然后:什么都没有。
您必须调用 getQuery
并getResult
才能执行它:
public function getOldLog($max_time)
{
$remove_rows = $this->createQueryBuilder('p')
->delete()
->where('p.created < :createdBeforeLimitDate')
->setParameter('createdBeforeLimitDate', $max_time-10*86400)
->getQuery() // <- new
->getResult(); // <- new
return "deleted rows";
}