Symfony 删除具有两个OneToOne关系的实体

Symfony 删除具有两个OneToOne关系的实体,symfony,foreign-keys,one-to-one,Symfony,Foreign Keys,One To One,我在Symfony 4.2的工作中遇到了一个问题 我是Symfony的初学者,需要帮助了解级联删除和外键错误 我有3个这样的实体: 第一个是调用图像 class Image { /** * @ORM\Id() * @ORM\GeneratedValue() * @ORM\Column(type="integer") */ private $id; /** * @ORM\Column(type="string", length=2

我在Symfony 4.2的工作中遇到了一个问题

我是Symfony的初学者,需要帮助了解级联删除和外键错误

我有3个这样的实体:

第一个是调用图像


class Image
{
    /**
    * @ORM\Id()
    * @ORM\GeneratedValue()
    * @ORM\Column(type="integer")
    */
    private $id;

    /**
    * @ORM\Column(type="string", length=255)
    */
    private $name;

    /**
    * @ORM\OneToOne(
    *     targetEntity="App\Entity\Thumbnail",
    *     mappedBy="Image",
    *     cascade={"persist"},
    *     orphanRemoval=true
    * )
    */
    private $Thumbnail;
}

第二个是此图像的缩略图:

class Thumbnail
{
    /**
    * @ORM\Id()
    * @ORM\GeneratedValue()
    * @ORM\Column(type="integer")
    */
    private $id;

    /**
    * @ORM\Column(type="string", length=255)
    */
    private $name;

    /**
    * @ORM\OneToOne(
    *     targetEntity="App\Entity\Image",
    *     inversedBy="Thumbnail",
    *     cascade={"persist", "remove"}
    * )
    * @ORM\JoinColumn(nullable=false)
    */
    private $image;
}

以及包含缩略图的Div:

class Div
{
    /**
    * @ORM\Id()
    * @ORM\GeneratedValue()
    * @ORM\Column(type="integer")
    */
    private $id;

    /**
    * @ORM\Column(type="string", length=255)
    */
    private $name;

    /**
    * @ORM\OneToOne(targetEntity="App\Entity\Thumbnail", cascade={"persist", "remove"})
    */
    private $Thumbnail;
}

这是我的三个实体,我的问题是当我试图删除这三个实体中的一个时,因为:

  • 当我删除一个图像时,我需要删除他的缩略图,但是这个Div没有缩略图也可以生存,所以我不能删除这个Div

  • 当我删除缩略图时,我不能删除图像,也不能删除Div

  • 当我删除Div时,我不能删除缩略图

我想知道做这项工作的最佳做法


感谢您的帮助,并对我的英语不好表示歉意。

请在您的Div实体中尝试以下代码:

/**
* @ORM\OneToOne(targetEntity="App\Entity\Thumbnail", cascade={"persist", "remove"})
* @ORM\JoinColumn(name="thumbnail_id", referencedColumnName="id", onDelete="SET NULL")
*/
private $Thumbnail;

谢谢你的回答,这解决了我的问题。我只是添加了“ORM\@JoinColumn”行,因为对于我的项目,在我的缩略图中添加Div实体毫无意义。请将我的答案添加到正确的位置,以便其他用户可以轻松找到正确的答案。