Symfony Gedmo \ Timestampable удалено при

1

У меня есть проект сущности и использование Timestampable, и когда я создаю сущность, у меня есть datetime при создании, когда обновление у меня есть datetime при обновлении, но когда я удаляю, я удаляю сущность в базе данных, но у меня нет поля deletedAt. Я не хочу, чтобы удалить объект, который я хочу установить только для удаления, или как удалить его из Timestampable

/**
  * Project
  *
  * @ORM\Table(name="project")
  * @ORM\Entity(repositoryClass="Artel\ProfileBundle\Entity\Repository\ProjectRepository")
  * @ExclusionPolicy("all")
  */
  class Project
{
/**
 * @var integer
 *
 * @ORM\Column(name="id", type="integer")
 * @ORM\Id
 * @ORM\GeneratedValue(strategy="AUTO")
 * @Type("integer")
 */
private $id;

/**
 * @Gedmo\Slug(fields={"id", "level", "main_skill", "name"}, separator="-")
 * @ORM\Column(name="slug", type="string", length=255, nullable=false)
 * @Assert\Length(min=3, max=255)
 * @Expose()
 * @Type("string")
 */
protected $slug;

/**
 * @var string
 *
 * @ORM\Column(name="description", type="text")
 * @Assert\NotBlank
 * @Expose()
 * @Type("string")
 */
private $description;

/**
 * @var datetime $created
 *
 * @Gedmo\Timestampable(on="create")
 * @ORM\Column(type="datetime")
 * @Expose()
 * @Type("DateTime")
 */
private $created;

/**
 * @var \DateTime
 *
 * @ORM\Column(name="deleted_at", type="datetime", nullable=true)
 */
protected $deletedAt;

/**
 * @var \DateTime
 *
 * @Gedmo\Timestampable(on="update")
 * @ORM\Column(name="updated_at", type="datetime")
 */
protected $updatedAt;

это мое действие

    /**
 * Deletes a Project entity.
 *
 * @Route("/{id}", name="admin_project_delete")
 * @Method("DELETE")
 * @ParamConverter("entity", class="ArtelProfileBundle:Project")
 */
public function deleteAction(Request $request, $entity)
{
    $form = $this->createDeleteForm($entity->getId());
    $form->handleRequest($request);

    if ($form->isValid()) {

        $em = $this->getDoctrine()->getManager();
        $em->remove($entity);
        $em->flush();
    }

    return $this->redirect($this->generateUrl('admin_all_project'));
}

private function createDeleteForm($id)
{
    return $this->createFormBuilder()
        ->setAction($this->generateUrl('admin_project_delete', array('id' => $id)))
        ->setMethod('DELETE')
        ->add('submit', 'submit', array('label' => 'Delete'))
        ->getForm()
        ;
}
Теги:
get
doctrine2

2 ответа

1

Поскольку вы уже используете Gedmo\Timestampable, посмотрите на поведение Gedmo SoftDeleteable. Это не только исключает удаление вашего объекта, но и сохраняет временную метку удаления в поле, как вы просили.

  • 0
    Что я должен сделать? Я использую $ em-> remove ($ entity); $ Em-> заподлицо (); и моя сущность удаляет в моей БД, я не понимаю, как удалить сущность, но не удалить в базе данных, просто установить deleteAt раз, как это решается для моей задачи?
  • 0
    Если вы настроили SoftDeletable правильно, он должен сделать именно это для вас. Из документов «Поведение SoftDeleteable позволяет« мягко удалять »объекты, фильтруя их во время SELECT, помечая их как метку времени, но не удаляя их явно из базы данных».
0

Я решил свою задачу:

stof_doctrine_extensions:
orm:
    default:
        ...
        softdeleteable: true

doctrine:
...
orm:
    filters:
        softdeleteable:
            class: Gedmo\SoftDeleteable\Filter\SoftDeleteableFilter
            enabled: true

и добавить к etity @Gedmo\SoftDeleteable (fieldName = "deletedAt")

/**
* Project
*
* @ORM\Table(name="project")
* @Gedmo\SoftDeleteable(fieldName="deletedAt")
* @ORM\Entity(repositoryClass="Artel\ProfileBundle\Entity\Repository\ProjectRepository")
* @ExclusionPolicy("all")
*/
class Project
{
/////
    /**
 * @var \DateTime $deletedAt
 *
 * @ORM\Column(name="deleted_at", type="datetime", nullable=true)
 */
protected $deletedAt;
}

и действия

    /**
 * Deletes a Project entity.
 *
 * @Route("/{id}", name="admin_project_delete")
 * @Method("DELETE")
 * @ParamConverter("entity", class="ArtelProfileBundle:Project")
 */
public function deleteAction(Request $request, $entity)
{
    $form = $this->createDeleteForm($entity->getId());
    $form->handleRequest($request);

    if ($form->isValid()) {
        $em = $this->getDoctrine()->getManager();
        $em->remove($entity);
        $em->flush();
    }

    return $this->redirect($this->generateUrl('admin_all_project'));
}

Тогда у меня есть сущность в моей базе данных и set deletedAt datetime

Ещё вопросы

Сообщество Overcoder
Наверх
Меню