Я использую расширение gedmo с доктриной 2 для применения мягкого удаления и поведения с метками времени (как это было в доктрине 1 по умолчанию, но для доктрины 2 она поставляется в расширении), всегда сложно удалить запись. Где, поскольку он должен устанавливать дату и время только в столбце «deleted_at».
Моя сущность
<?php
namespace Entities;
use Doctrine\ORM\Mapping AS ORM;
use Gedmo\Mapping\Annotation as Gedmo;
/**
* @ORM\Entity
*/
class ilook_user
{
/**
* @ORM\Id
* @ORM\Column(type="integer", length=11)
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
.
.
.
/**
* @var datetime $created_at
*
* @Gedmo\Timestampable(on="create")
* @ORM\Column(type="datetime")
*/
private $created_at;
/**
* @var datetime $updated_at
*
* @Gedmo\Timestampable(on="update")
* @ORM\Column(type="datetime")
*/
private $updated_at;
/**
* @ORM\Column(name="deleted_at", type="datetime", nullable=true)
*/
private $deleted_at;
Метод, который я использую для удаления записи:
public static function softDeleteUser($user_id)
{
//Delete user
$em = \Zend_Registry::get('em');
$usr_obj = $em->find('\Entities\ilook_user', $user_id);
$em->remove($usr_obj);
$em->getConnection()->close();
$em->flush();
return TRUE;
}
Загрузка библиотеки расширения gedmo:
$classLoader = new \Doctrine\Common\ClassLoader('Gedmo', realpath(__DIR__ . '/../library/'), 'loadClass');
$classLoader->register();
$autoloader->pushAutoloader(array($classLoader, 'loadClass'), 'Gedmo');
Gedmo\DoctrineExtensions::registerAbstractMappingIntoDriverChainORM(
$driverChain, // our metadata driver chain, to hook into
$cachedAnnotationReader // our cached annotation reader
);
// timestampable
$timestampableListener = new Gedmo\Timestampable\TimestampableListener;
$timestampableListener->setAnnotationReader($cachedAnnotationReader);
$evm->addEventSubscriber($timestampableListener);
// SoftDeleteable
$softDeleteableListener = new Gedmo\SoftDeleteable\SoftDeleteableListener;
$softDeleteableListener->setAnnotationReader($cachedAnnotationReader);
$evm->addEventSubscriber($softDeleteableListener);
Я уверен, что библиотека gedmo была правильно интегрирована, потому что функции временных меток работают.