Her*_*tu' 3 php symfony doctrine-orm
即使对象被正确更新,似乎数据不会持久存在,我也不明白为什么.
这是我的实体:
Article.php
/**
 * @var AttributeInArticle
 *
 * @ORM\OneToMany(
 *      targetEntity="XXX\DatabaseBundle\Entity\AttributeInArticle",
 *      mappedBy="article"
 * )
 */
private $attributeInArticles;
....
public function __construct()
{
    $this->attributeInArticles = new ArrayCollection();
}
/**
 * @return AttributeInArticle
 */
public function getAttributeInArticles()
{
    return $this->attributeInArticles;
}
public function addAttributeInArticle(AttributeInArticle $attributeInArticles)
{
    $this->attributeInArticles[] = $attributeInArticles;
    return $this;
}
public function removeAttributeInArticle(AttributeInArticle $attributeInArticles)
{
    $this->attributeInArticles->removeElement($attributeInArticles);
}
AttributeInArticle.php
/**
 * @var  Attribute
 *
 * @ORM\ManyToOne(
 *      targetEntity="XXX\DatabaseBundle\Entity\Attribute",
 *      inversedBy="attributeInArticles"
 * )
 * @ORM\JoinColumns({
 *     @ORM\JoinColumn(
 *          name="attribute_id",
 *          referencedColumnName="id")
 * })
 */
private $attribute;
/**
 * @var Article
 *
 * @ORM\ManyToOne(
 *      targetEntity="XXX\DatabaseBundle\Entity\Article",
 *      inversedBy="attributeInArticles"
 * )
 * @ORM\JoinColumns({
 *       @ORM\JoinColumn(
 *          name="article_id",
 *          referencedColumnName="id"
 *      )
 * })
 *
 */
private $article;
/**
 * @return Attribute
 */
public function getAttribute()
{
    return $this->attribute;
}
/**
 * @param Attribute $attribute
 */
public function setAttribute($attribute)
{
    $this->attribute = $attribute;
}
+ getter & setter for $article
在控制器中我称之为:
$article->removeAttributeInArticle($attributeInArticle);
如果我在删除操作之前和之后转储$ article对象,则$ article对象中包含corect数据.这意味着$ attributeInArticle已被删除.
但由于某种原因,它不会持续存在这些数据.
答案很简单.
要卸下Attribute从Article和持续存在的/冲洗Article.如果你看看你的映射你会很容易发现之间的关系Article,并AttributeInArticole通过后者拥有.
当你进行刷新操作时,出于性能原因,学说"看起来"仅仅是拥有关系的一面以及它的变化:如果没有任何改变,就不需要在db中编写它.
所以,你在这里可以做的是$attributeInArticle直接删除而不用担心Article实体.
所以,基本上
$em = $this
    ->getDoctrine()
    ->getManager();
$em->remove($attributeInArticle);
$em->flush();
另一种选择是使用orphanRemoval在$attribueInArticles你的Article实体.
基本上,
//Article.php
/**
 * @var AttributeInArticle
 *
 * @ORM\OneToMany(
 *      targetEntity="XXX\DatabaseBundle\Entity\AttributeInArticle",
 *      mappedBy="article",
 *      orphanRemoval=true
 * )
 */
private $attributeInArticles;
和
$article->removeAttributeInArticle($attributeInArticle);
| 归档时间: | 
 | 
| 查看次数: | 7048 次 | 
| 最近记录: |