Doctrine 2 : ManyToOne 级联删除导致引用的实体被删除
Doctrine 2 : ManyToOne cascade remove causes the referenced entity to be deleted
我有一个包含产品 Feed 的设置,每个 Feed 都有很多产品。非常简化的设置看起来像这样:
供稿模型:
/**
* Class Feed represents a single feed as supplier by a supplier
* @package App\Model
* @Entity @Table(name="feeds")
*/
class Feed
{
/**
* @var int
* @Id @Column(type="integer") @GeneratedValue
*/
protected $id;
}
产品型号:
/**
* Class Product is the base for either supplied and current products
* @package App\Model
*/
class Product
{
/**
* @var int
* @Id @Column(type="integer") @GeneratedValue
*/
protected $id;
/**
* @var Feed
* @ManyToOne(targetEntity="App\Model\Feed", cascade={"remove"})
* @JoinColumn(name="id_feed", referencedColumnName="id", onDelete="CASCADE")
*/
protected $feed;
}
现在如您所见,我启用了级联,因为我希望在删除提要时自动删除所有产品。
但是...目前,当我删除一个产品时,它会导致原始 Feed 也被删除。我怀疑这与关系的设置方式有关,但我似乎无法弄清楚哪里错了。
谁能更清楚地说明这种情况?
供稿模型:
/**
* Class Feed represents a single feed as supplier by a supplier
* @package App\Model
* @Entity @Table(name="feeds")
*/
class Feed
{
/**
* @var int
* @Id @Column(type="integer") @GeneratedValue
*/
protected $id;
/**
* @var Feed
* @OneToMany(targetEntity="App\Model\Product", mappedBy="feed", orphanRemoval=true, cascade={"remove"})
*
*/
protected $products;
}
产品型号:
/**
* Class Product is the base for either supplied and current products
* @package App\Model
*/
class Product
{
/**
* @var int
* @Id @Column(type="integer") @GeneratedValue
*/
protected $id;
/**
* @var Feed
* @ManyToOne(targetEntity="App\Model\Feed", inversedBy="products")
* @JoinColumn(name="id_feed", referencedColumnName="id")
*/
protected $feed;
}
现在,如果您删除一个 Feed 对象,链接到该 Feed 的产品对象也将被删除。
这是双向关系。
更多信息:
级联={"remove"}
- 反向实体将在删除拥有方(Feed)时被删除,但前提是实体(产品)不属于 Feed 以外的其他人。
孤儿移除="true"
- 同上,但 ORM 忽略实体(产品)是否为另一个实体所有
我有一个包含产品 Feed 的设置,每个 Feed 都有很多产品。非常简化的设置看起来像这样:
供稿模型:
/**
* Class Feed represents a single feed as supplier by a supplier
* @package App\Model
* @Entity @Table(name="feeds")
*/
class Feed
{
/**
* @var int
* @Id @Column(type="integer") @GeneratedValue
*/
protected $id;
}
产品型号:
/**
* Class Product is the base for either supplied and current products
* @package App\Model
*/
class Product
{
/**
* @var int
* @Id @Column(type="integer") @GeneratedValue
*/
protected $id;
/**
* @var Feed
* @ManyToOne(targetEntity="App\Model\Feed", cascade={"remove"})
* @JoinColumn(name="id_feed", referencedColumnName="id", onDelete="CASCADE")
*/
protected $feed;
}
现在如您所见,我启用了级联,因为我希望在删除提要时自动删除所有产品。
但是...目前,当我删除一个产品时,它会导致原始 Feed 也被删除。我怀疑这与关系的设置方式有关,但我似乎无法弄清楚哪里错了。
谁能更清楚地说明这种情况?
供稿模型:
/**
* Class Feed represents a single feed as supplier by a supplier
* @package App\Model
* @Entity @Table(name="feeds")
*/
class Feed
{
/**
* @var int
* @Id @Column(type="integer") @GeneratedValue
*/
protected $id;
/**
* @var Feed
* @OneToMany(targetEntity="App\Model\Product", mappedBy="feed", orphanRemoval=true, cascade={"remove"})
*
*/
protected $products;
}
产品型号:
/**
* Class Product is the base for either supplied and current products
* @package App\Model
*/
class Product
{
/**
* @var int
* @Id @Column(type="integer") @GeneratedValue
*/
protected $id;
/**
* @var Feed
* @ManyToOne(targetEntity="App\Model\Feed", inversedBy="products")
* @JoinColumn(name="id_feed", referencedColumnName="id")
*/
protected $feed;
}
现在,如果您删除一个 Feed 对象,链接到该 Feed 的产品对象也将被删除。
这是双向关系。
更多信息:
级联={"remove"}
- 反向实体将在删除拥有方(Feed)时被删除,但前提是实体(产品)不属于 Feed 以外的其他人。
孤儿移除="true"
- 同上,但 ORM 忽略实体(产品)是否为另一个实体所有