使用gedmo扩展名在doctrine2中进行软删除功能 [英] Softdelete functionality in doctrine2, using gedmo extension

查看:88
本文介绍了使用gedmo扩展名在doctrine2中进行软删除功能的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用带有doctrine2的gedmo扩展名来应用软删除和可时间戳化的行为(默认情况下它们在doctrine1中,但是对于doctrine2则是扩展名),总是很难删除记录。

I am using gedmo extension with doctrine2 to apply soft delete and timestampable behaviours(As they were in doctrine1 by default but for doctrine2 it comes in an extension), it is always hard deleting the record. Where as it should only set datetime in "deleted_at" column.

我的实体

<?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;

我用来删除记录的方法:

Method I am using to remove record :

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扩展程序lib:

The loading of gedmo extension lib :

$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 lib已正确集成,因为可时间戳功能可以正常工作。

I am sure that gedmo lib has been integrated properly because timestamplable features are working.

推荐答案

哇!我找到了答案:

只需要在实体类上添加以下注释。

just need to add following annotations on the entity class.

/**
 * @ORM\Entity
 * @ORM\Table(name="ilook_user")
 * @Gedmo\SoftDeleteable(fieldName="deleted_at")
 */
class ilook_user
{

这篇关于使用gedmo扩展名在doctrine2中进行软删除功能的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆