2017-02-18 13 views
0

В моей базе данных У меня есть много продуктов с атрибутом datecreated. Я хочу удалить любой продукт через некоторое время, например 10 или 20 дней, когда я обновляю домашнюю страницу.удалить из базы данных ошибку после истечения срока действия

Это мой контроллер:

public function indexAction() 
{ 
    $datenow = new \DateTimeImmutable(); 
    $datenowStringType = $datenow->format('Y-m-d'); 

    $em = $this->getDoctrine()->getManager(); 
    $products = $em->getRepository('ProductBundle:Product')->findAll(); 

    foreach ($products as $produit) { 
     $CreatedDate = $produit->getCreatedDate(); 
     $CreatedDate_StringType = $CreatedDate->format('Y-m-d'); 

     $duree = '+'.$produit->getDuree(); 
     $date_fin_duree = date('Y-m-d', strtotime($CreatedDate_StringType.$duree)); 

     if (strtotime($datenowStringType)<strtotime($date_fin_duree)) { 
      $em->remove($produit); 
     } 
    } 
    array_values($products); 

    return $this->render('product/index.html.twig', array(
     'products' => $products, 
    )); 
} 

Там нет возвращаемых ошибок, но продукт не удален. Это может быть простая ошибка, но я много искал, и я думаю, что это недостаток концентрации. Пожалуйста, помогите?

+1

Где вы звоните? – Cerad

+0

Я назвал его после того, как я удалю, но он удалит продукт, даже если оно ложно –

+0

спасибо, что у Rhono есть решение? –

ответ

0
$date = ''; // calculate your date here, it should be DateTime object 
$qb = $em->createQueryBuilder(); 
$qb->delete('Product', 'p'); 
$qb->where('p.duree < :date'); 
$qb->setParameter('date', $date); 
+3

Хотя этот фрагмент кода приветствуется и может оказать некоторую помощь, это будет [сильно улучшено, если в него включено объяснение] (// meta.stackexchange.com/q/114762) * как * и * почему * это решает проблему. Помните, что вы отвечаете на вопрос читателей в будущем, а не только на человека спрашивая сейчас! Пожалуйста, отредактируйте свой ответ, чтобы добавить объяснение, и укажите, какие ограничения и допущения применяются. –