Функциональность Softdelete в доктрине 2 с использованием расширения gedmo

Я использую расширение 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 была правильно интегрирована, потому что функции временных меток работают.


person Jaskaran Singh    schedule 17.02.2015    source источник


Ответы (1)


Ух ты! Я нашел ответ:

просто нужно добавить следующие аннотации к классу сущности.

/**
 * @ORM\Entity
 * @ORM\Table(name="ilook_user")
 * @Gedmo\SoftDeleteable(fieldName="deleted_at")
 */
class ilook_user
{
person Jaskaran Singh    schedule 18.02.2015
comment
Эту информацию легко пропустить. Я так же искал! Но к документации претензий нет... - person A.D.; 25.04.2016
comment
Да, столбцы с метками времени (created_at и updated_at) работают без этого, но столбец обратимого удаления должен быть определен в аннотации чуть выше класса. - person Jaskaran Singh; 28.04.2016