Diskuze: Nechat v databází pouze nejnovější zprávy | Doctrine 2
Zobrazeno 3 zpráv z 3.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
Ahoj,
jelikož jde v zásadě jen o SQL dotaz, který nijak přímo nepracuje s
entitami, navrhuji toto neřešit přes DQL, ale přímo přes SQL.
$this->em->getConnection()->executeQuery("
DELETE FROM `message`
WHERE `id` IN (
SELECT `id`
FROM `message`
ORDER BY `id` DESC
OFFSET 200
)
");
Druhá varianta by mohla být, že se jedním DQL dotazem vyhledají všechny entity, které se mají smazat (v příkladu ten subselect) a do druhého dotazu se do operátoru IN předají.
$entities = $this->em->createQuery("
SELECT m
FROM App\Model\Entities\MainMessage m
ORDER BY m.id DESC
")
->setFirstResult(200)
->getResult();
$ids = array();
foreach ($entities as $entity) {
$ids[] = $entity->id;
}
$this->em->createQuery("
DELETE FROM App\Model\Entities\MainMessage m
WHERE m.id IN (:ids)
")
->setParameter("ids", $ids)
->getResult();
Nejsem si z hlavy jistý, zda by operátor IN() v DQL uměl pobrat i celou entitu, nebo se to musí řešit přes ta ID.
Zobrazeno 3 zpráv z 3.