Я пытаюсь найти запрос для удаления объектов в таблице specfi c, которые были созданы $xDaysAgo
days a go from today (сегодняшняя дата создается с использованием нового объекта dateTime).
Так что в моей базе данных у меня будет
id | created_at | name
5 | 2020-01-01 12:00:00 | test
6 | 2020-04-09 15:00:00 | test1
7 | 2020-04-11 15:00:00 | test2
И тогда я выберу $xDaysAgo
равным 5
, тогда мой метод removeObject($xDaysAgo)
будет удалять только объекты с идентификатором 6
и 7
(как сегодня 11-е). Мне сказали, что с помощью queryBuilder вы можете просто упорядочить объекты и удалить те, которые удовлетворяют критериям напрямую. Однако я не смог найти ни одного примера, демонстрирующего это. Мне удалось реализовать знакомую функциональность, но не совсем то, что я ищу. У меня есть это сейчас, чтобы удалить массив объектов, но он не принимает во внимание дату:
public function removeObject(array $objectIds)
{
$qb = $this->getEntityManager()
->getConnection()
->createQueryBuilder()
->delete('someTable');
$qb->add('where', $qb->expr()->in('id', $objectIds));
$qb->execute();
}
Что, кажется, работает нормально. Я не могу изменить это, чтобы добиться того, чего я действительно хочу. Мы будем благодарны за любую помощь!
мой последний метод должен быть примерно таким (это c некоторые детали, которые должны быть изменены, а не рабочий код):
public function removeObject(int $xDaysAgo)
{
$qb = $this->getEntityManager()
->getConnection()
->createQueryBuilder()
->delete('someTable');
//order them using created_at and then delete those seems better than looping throw all of them??
$qb->add('orderBy', $qb->expr()->in('created_at', $xDaysAgo));
$qb->execute();
}