【问题标题】:Delete CASCADE on field declared dynamically删除动态声明的字段上的 CASCADE
【发布时间】:2018-04-03 13:40:18
【问题描述】:

我有那个构造函数

/**
 * User constructor.
 */
public function __construct()
{
    $this->projectUser = new ArrayCollection();
    $this->skills = new ArrayCollection();
    $this->goals = new ArrayCollection();
    $this->technicalReferentOf = new ArrayCollection();

    parent::__construct();
}

并且technicalReferentOf 变量是动态声明的。

它链接到只包含外键的那个表:

user_id |project_id |
--------|-----------|
46      |3          |
46      |13         |
69      |3          |

但是当我想删除一个用户时,我有一个外键错误,我无法通过级联删除来解决,因为没有字段。

解决这个问题的正确方法是什么?提前致谢

【问题讨论】:

  • 那么,当特定的User 被删除时,您想删除所有用户的项目吗?我认为您需要在连接表的数据库层上有一个CASCADE...
  • 不只是用户:/问题需要信息?
  • 好吧,这让事情变得更清楚了。正如我所说,您的联接表上需要有一个CASCADECASCADE 不适用于project 表,而仅适用于连接表(即密钥对(user_id, project_id))。密钥对将被删除,但项目将保持不变...
  • 好吧,我开始明白了。但是我在哪里指定呢?我需要在我的用户类上添加一个字段吗?
  • 酷,我做到了;)

标签: php symfony doctrine symfony-2.8


【解决方案1】:

您需要在连接表上指定CASCADE ON DELETE 约束。我鼓励user_idproject_id 都这样做(分配的项目可以被删除,对吧?)。

在不知道使用哪个数据库供应商的情况下,我无法编写确切的查询来修改您的表,但如果您需要帮助,请在您的问题中提供更新...

希望这会有所帮助...

【讨论】:

    猜你喜欢
    • 2018-04-22
    • 1970-01-01
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    • 2011-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多