Самостоятельное присоединение к доктрине: Symfony - PullRequest
0 голосов
/ 17 июня 2019

У меня есть объект для журналов, где я сохраняю записи об ошибках приложения с полем для вставленной метки времени. Мое требование - удалить записи старше 10 дней с момента последней записи в журнале. Моя структура сущности выглядит так:

class MyacuvueLogs
{
    /**
     * @ORM\Id()
     * @ORM\GeneratedValue()
     * @ORM\Column(type="integer")
     */
    private $id;

    /**
     * @ORM\Column(type="string", length=255, nullable=true)
     */
    private $mobile;

    /**
     * @ORM\Column(type="integer", nullable=true)
     */
    private $created;

    /**
     * @ORM\Column(type="string", length=255)
     */
    private $apiName;

    /**
     * @ORM\Column(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";
    }

Однако это не работает.

1 Ответ

0 голосов
/ 18 июня 2019

у вас есть следующий код:

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";
}
...