Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Symfony Gedmo\TIMESTABLE DELEDAT_Php_Symfony_Doctrine Orm_Get - Fatal编程技术网

Php Symfony Gedmo\TIMESTABLE DELEDAT

Php Symfony Gedmo\TIMESTABLE DELEDAT,php,symfony,doctrine-orm,get,Php,Symfony,Doctrine Orm,Get,我有实体项目并使用时间表,当我创建实体时,我有创建时的日期时间,当更新时,我有更新时的日期时间,但当我删除时,我在数据库中删除我的实体,但我没有字段deletedAt。我不想删除实体我只想设置删除或如何使用从时间表中删除 /** * Project * * @ORM\Table(name="project") * @ORM\Entity(repositoryClass="Artel\ProfileBundle\Entity\Repository\ProjectRepository

我有实体项目并使用时间表,当我创建实体时,我有创建时的日期时间,当更新时,我有更新时的日期时间,但当我删除时,我在数据库中删除我的实体,但我没有字段deletedAt。我不想删除实体我只想设置删除或如何使用从时间表中删除

/**
  * 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()
        ;
}

因为您已经在使用
Gedmo\timestable
,所以请看看Gedmo。这种行为不仅可以避免删除实体,还可以像您要求的那样将删除时间戳存储在字段中。

我解决了我的任务:

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

doctrine:
...
orm:
    filters:
        softdeleteable:
            class: Gedmo\SoftDeleteable\Filter\SoftDeleteableFilter
            enabled: true
并添加到etity@Gedmo\SoftDeleteable(fieldName=“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'));
}

然后我的数据库中有实体并设置deletedAt datetime

我需要做什么?我使用$em->remove($entity)$em->flush();我的数据库中的实体删除我不知道如何删除实体但不删除数据库中的实体只是设置delete在时间上这是如何解决我的任务的?如果您正确设置了
SoftDeletable
,它应该为您做到这一点。从文档中,“SoftDeleteable行为”允许“软删除”对象,通过将对象标记为时间戳在选定的时间对其进行过滤,但不明确地将其从数据库中删除
    /**
 * 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'));
}