0

我在保存一对多自引用关系时遇到问题,父母和孩子都正确保存在数据库中,但我让孩子的 parent_id 为空。我遵循了学说示例……但不知道

namespace CD\Entity;
/**
 * @Entity
 */

class Category {


/**
* @Id 
* @Column(type="integer")
* @GeneratedValue(strategy="IDENTITY")
*/
private $id;

/** @Column(type="string",length=50) */
private $name;


/**
 * @OneToMany(targetEntity="Category", mappedBy="parent",cascade={"persist"})
 */
private $children;

/**
 * @ManyToOne(targetEntity="Category", inversedBy="children")
 * @JoinColumn(name="parent_id", referencedColumnName="id")
 */
private $parent;


// setters and getters ...

}

我的控制器在这里:

public function insertAction()
{

    $cm = new CD\Entity\Category();
    $cc = new CD\Entity\Category();

    $cm->name = 'mainCat';
    $cc->name = 'childCat';

    $cm->children = array($cc);

    $this->_em->persist($cm);
    $this->_em->flush();        

}

我真的不知道我做错了什么

4

2 回答 2

0

您是否尝试过Doctrine Extensions,尤其是扩展?它使这样的工作变得非常容易。

于 2013-04-17T05:14:45.177 回答
0

您需要保留所有实体。运行后(假设您使用学说)

学说:生成:实体 CD/实体

您将有一个名为“Category->addChildren”的函数,它应该用于将子项添加到现有的类别实体。

尝试这个:

public function insertAction()
{

    $cm = new CD\Entity\Category();
    $cc = new CD\Entity\Category();

    $cm->setName('mainCat');
    $cc->setName('childCat');

    $cm->addChildren($cc);

    $this->_em->persist($cm);        
    $this->_em->persist($cc);        

    $this->_em->flush();        

}
于 2013-04-19T12:48:37.180 回答