【问题标题】:Symfony2 ondelete set NullSymfony2 ondelete 设置 Null
【发布时间】:2015-07-26 23:00:42
【问题描述】:

我是 symfony2 的新手,我开始了一个博客项目。该项目有两个实体,一个是帖子 (Noticia),另一个是 cmets (Comentario)。 我需要删除一个帖子,但我不能因为与 cmets 的关系。

这是我的属性:

/**
 * @ORM\ManyToOne(targetEntity="Noticia", inversedBy="comentarios", onDelete="SET NULL")
 * @ORM\JoinColumn(name="noticia_id", referencedColumnName="id")
 */
private $noticia;

/**
 * @ORM\OneToMany(targetEntity="Comentario", mappedBy="noticia")
 */
private $comentarios = array();

我尝试输入 onDelete="SET NULL" 但是,当我使用学说更新我的数据库时:php app/console doctrine:schema:update --force 我收到了这个错误:

The annotation @ORM\ManyToOne declared on property Noticia 
Bundle\Entity\Comentario\::$noticia does not have a property named "onDelete".
Avaible properties: targetEntity, cascade, fetch, inversedBy

【问题讨论】:

    标签: php symfony foreign-keys constraints symfony-2.5


    【解决方案1】:

    我认为 onDelete="SET NULL" 应该是 JoinColumn 注释的一部分,而不是 ManyToOne 注释的一部分。

    【讨论】:

    • 另外,在您进行此更改后,请务必更新您的数据库架构。
    【解决方案2】:

    一种方法是搜索所有与您要删除的文章关系的 cmets。 所以首先删除所有的cmets,而不是文章本身。 这是不更改注释的最简单方法。

    【讨论】:

    • 我知道,但是,什么是“正确的方法”??删除一个有很多cmets的帖子真的是“NON best practice”吗??
    • 我觉得 onDelete="CASCADE" 在这里很合适。如果帖子消失了,您要保留评论吗?如果没有,允许删除帖子以级联删除其评论。
    猜你喜欢
    • 2019-01-02
    • 2014-01-19
    • 1970-01-01
    • 2012-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多