我尝试了类似" Use-Case 3: Join-Table with Metadata"的内容。 我已经使用过" Cart"," Item"和" CartItem"对象。
我收到$cart->getItems();
等项目。
我们假设有4个项目。现在,我删除了一个项目$items->remove(1);
以删除项目。
$items->count()
告诉我一个项目已被删除(它说3)。另外,当查看代码时,我看到该集合已经改变。
因此,当我冲洗时,我希望CartItem将被删除,坚果没有任何反应。即使我再次添加项目,如$cart->setItems($items);
,也不会在刷新时发生任何事情。
删除项目应该是直截了当的,不是吗?我做错了什么?
修改编辑修改
即使是正常的"关键它没有用。我创建了一些新对象:
汤
/**
* @Entity
* @Table(name="Soups")
**/
class Soup {
/**
* @Id @Column(type="integer")
* @GeneratedValue
**/
protected $id;
/**
* @Column(type="string", length=50)
*/
protected $name;
/**
* @OneToMany(targetEntity="SoupIngredient", mappedBy="soup", cascade={"persist"});
*/
protected $soupIngredients;
public function __construct() {
$this->soupIngredients = new ArrayCollection();
}
public function getId() {
// Return id.
return $this->id;
}
public function getName() {
// Return value.
return $this->name;
}
public function setName($value) {
// Set value.
$this->name = $value;
// Return.
return $this;
}
public function getSoupIngredients() {
// Return value.
return $this->soupIngredients;
}
public function setSoupIngredients($value) {
// Set value.
$this->soupIngredients = $value;
// Return.
return $this;
}
}
成分
/**
* @Entity
* @Table(name="Ingredients")
**/
class Ingredient {
/**
* @Id @Column(type="integer")
* @GeneratedValue
**/
protected $id;
/**
* @Column(type="text", length=50)
*/
protected $name;
/**
* @OneToMany(targetEntity="SoupIngredient", mappedBy="ingredient", cascade={"persist"});
*/
protected $soupIngredients;
public function __construct() {
$this->soupIngredients = new ArrayCollection();
}
public function getId() {
// Return id.
return $this->id;
}
public function getName() {
// Return value.
return $this->name;
}
public function setName($value) {
// Set value.
$this->name = $value;
// Return.
return $this;
}
public function getSoupIngredients() {
// Return value.
return $this->soupIngredients;
}
public function setSoupIngredients($value) {
// Set value.
$this->soupIngredients = $value;
// Return.
return $this;
}
}
SoupIngredients
/**
* @Entity
* @Table(name="SoupIngredients")
**/
class SoupIngredient {
/**
* @Id @Column(type="integer")
* @GeneratedValue
**/
protected $id;
/**
* @Column(type="float")
*/
protected $quantity;
/**
* @ManyToOne(targetEntity="Soup", inversedBy="soupIngredients")
*/
protected $soup;
/**
* @ManyToOne(targetEntity="Ingredient", inversedBy="soupIngredients")
*/
protected $ingredient;
public function __construct() {
}
public function getId() {
// Return id.
return $this->id;
}
public function getQuantity() {
// Return value.
return $this->quantity;
}
public function setQuantity($value) {
// Set value.
$this->quantity = $value;
// Return.
return $this;
}
public function getSoup() {
// Return value.
return $this->soup;
}
public function setSoup($value) {
// Set value.
$this->soups = $value;
// Return.
return $this;
}
public function getIngredient() {
// Return value.
return $this->ingredient;
}
public function setIngredient($value) {
// Set value.
$this->ingredient = $value;
// Return.
return $this;
}
}
我得到一个有{5}成分的Soup
对象。
// Get Soup #1.
$em->getRepository("Soup")->find(1);
// Get ingredients.
$ingredients = $soup->getIngredients();
// Remove ingredient #2.
$ingredients->remove(2);
// Well, let's flush.
$em->flush();
什么都没发生。我可以使用SoupIngredient
删除$em
,但我想在函数($soup->removeIngredient($ingredient)
)中使用它,因此我并不总是$em
可用。实现此目的的唯一方法是使用$em->remove($soupIngredient)
(然后它将在刷新时更新)。
答案 0 :(得分:0)
orphanRemoval=true
就像魔法......
愚蠢的我!