【问题标题】:Doctrine 2 - not able to save one to many self-reference relationship学说 2 - 无法保存一对多的自我参照关系
【发布时间】:2013-03-22 20:00:46
【问题描述】:

我在保存一对多自引用关系时遇到问题,父母和孩子都正确保存在数据库中,但我让孩子的 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();        

}

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

【问题讨论】:

    标签: doctrine one-to-many categories self persist


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      您需要持久化所有实体。 并且在运行之后(假设你使用学说)

      doctrine:generate:entities CD/Entity

      您将拥有一个名为“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();        
      
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-04-24
        • 2016-04-21
        • 2014-09-29
        • 1970-01-01
        相关资源
        最近更新 更多