我正在使用Php主义,并且正在将@OnToMany
与cascade
all
映射。我有一个父类SalesOrder
和一个子类SalesOrderDetails
。
Case 1 : Save
-当我保存新记录的销售订单以及销售订单详细信息时。它按预期工作。Case 2 : Update
-这是问题,我正在合并Sales Order
,这很好,但是它会为其子项SalesOrderDetail
插入新记录而不是对其进行更新。理想情况下,它应该适用于merge
,但也适用于儿童,但不适用于儿童。 到目前为止,我从数据库获取ID的销售订单明细,然后更改其属性。理想情况下不是这样,这意味着如果将id设置为无人对象,则应该更新ID而不是创建新记录。
注意: 1.如果合并具有ID值,则正在使用父对象。 2.我不是在这里添加新项目,而是通过合并来更新现有记录。
SalesOrder.php
/**
* @Entity @Table(name="sales_orders")
* */
class SalesOrder extends BaseEntity {
/**
* @OneToMany(targetEntity="SalesOrderDetail",cascade="all", mappedBy="salesOrder" )
*/
protected $itemSet;
function __construct() {
$this->itemSet = new ArrayCollection();
}
}
SalesOrderDetail.php
/**
* @Entity @Table(name="sales_order_details")
* */
class SalesOrderDetail extends BaseEntity {
/** @Id @Column(type="integer") @GeneratedValue * */
protected $id;
/**
* @ManyToOne(targetEntity="SalesOrder")
* @JoinColumn(name="order_no", referencedColumnName="order_no")
*/
protected $salesOrder;
}
cascade={"merge"}
如果我使用Cascades merge
类型:Doctrine \ ORM \ ORMInvalidArgumentException消息:多个 通过给定的关联找到非持久的新实体 图表:*通过关系发现了一个新实体 未配置的'Ziletech \ Database \ Entity \ SalesOrder#itemSet' 级联实体的持久化操作: Ziletech \ Database \ Entity \ SalesOrderDetail @ 0000000052218380000000007058b4a6。 解决此问题的方法:显式调用EntityManager#persist() 这个未知的实体或配置级联会在 例如@ManyToOne(..,cascade = {“ persist”})的映射。如果你 无法找出导致问题实施的实体 'Ziletech \ Database \ Entity \ SalesOrderDetail #__ toString()'以获取 线索。 *通过关系发现了一个新实体 未配置的'Ziletech \ Database \ Entity \ SalesOrder#itemSet' 级联实体的持久化操作: Ziletech \ Database \ Entity \ SalesOrderDetail @ 0000000052218071000000007058b4a6。 解决此问题的方法:显式调用EntityManager#persist() 这个未知的实体或配置级联会在 例如@ManyToOne(..,cascade = {“ persist”})的映射。如果你 无法找出导致问题实施的实体 'Ziletech \ Database \ Entity \ SalesOrderDetail #__ toString()'以获取 线索。
答案 0 :(得分:1)
您的映射有误,cascade
needs an array
/**
* @OneToMany(targetEntity="SalesOrderDetail", cascade={"all"}, mappedBy="salesOrder" )
*/
protected $itemSet;