2015-11-05 60 views
2

親子我有一個表「節點」,擁有ID,PARENT_ID等等...Symfony的原則 - 不工作

/** 
* Node 
* 
* @ORM\Table(name="nodes", indexes={@ORM\Index(name="parent", columns={"parent_id"}), @ORM\Index(name="path", columns={"path"})}) 
* @ORM\Entity 
*/ 
class Node 
{ 
    /** 
    * @var integer 
    * 
    * @ORM\Column(name="id", type="integer") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="IDENTITY") 
    */ 
    private $id; 

    /** 
    * @var integer 
    * 
    * @ORM\Column(name="parent_id", type="integer", nullable=true) 
    */ 
    private $parentId; 

    ... 
} 

現在我想建立親子relationsship(PARENT_ID是同一個表的id的外鍵)。基於對關係(http://symfony.com/doc/current/book/doctrine.html#entity-relationships-associations)symfony的食譜比如我試圖創建它:

/** 
* @ORM\OneToMany(targetEntity="Node", mappedBy="parent") 
*/ 
protected $children; 


/** 
* @ORM\ManyToOne(targetEntity="Node", inversedBy="children") 
* @ORM\JoinColumn(name="parent_id", referencedColumnName="id") 
*/ 
protected $parent; 


public function __construct() 
{ 
    $this->children = new ArrayCollection(); 
} 

我的第一個問題是,該命令:

php app/console doctrine:generate:entities AppBundle 

並沒有給父母的getter和setter和兒童(沒有錯誤信息,只是正常的「生成...」消息)

所以我自己創造的getter和setter方法:

/** 
* @return mixed 
*/ 
public function getParent() { 
    return $this->parent; 
} 

/** 
* @param mixed $parent 
*/ 
public function setParent($parent) { 
    $this->parent = $parent; 
} 

/** 
* @return mixed 
*/ 
public function getChildren() { 
    return $this->children; 
} 

/** 
* @param mixed $children 
*/ 
public function setChildren($children) { 
    $this->children = $children; 
} 

但這似乎不起作用。我不能獲取例如節點的父或與孩子們:

$node->getParent(); 
$node->getChildren(); 

兩個命令retun空,但數據是正確的。該代碼甚至沒有試圖查詢父母或孩子。

+0

你已經看過日誌和分析器輸出了嗎? – chapay

+0

是的。這就是命令行輸出和日誌的輸出:http://pastebin.com/mJU3Fp7h – bernhardh

+0

而剖析器只顯示我1查詢(查詢獲取$節點本身)和沒有其他查詢來獲取$ node-> getParent ()或$ node-> getChildren()。 – bernhardh

回答

0

好吧,我發現爲什麼我有這個(愚蠢的)問題。由於我最初使用表的逆向工程生成了我的實體(http://symfony.com/doc/current/cookbook/doctrine/reverse_engineering.html),所以我在我的配置文件(自動生成的地方)中使用了原則YML文件。看來,如果你有這樣的文件,symfony/doctrine使用它們而不是註釋。而已。我只需要刪除它們。 facepalm

0

確保您的類的定義是這樣的:

/** 
* @ORM\Entity() 
*/ 
class Node 
{ 
    public function __construct() 
    { 
     $this->children= new ArrayCollection(); 
    } 

    /** 
* Set parent 
* 
* @param \Bundle\Entity\Node $parent 
* @return Message 
*/ 
public function setParent(\Bundle\Entity\Node $parent = null) 
{ 
    $this->parent = $parent; 

    return $this; 
} 

/** 
* Get parent 
* 
* @return \Bundle\Entity\Node 
*/ 
public function getParent() 
{ 
    return $this->parent; 
} 

/** 
* Add children 
* 
* @param \Bundle\Entity\Node $children 
* @return Message 
*/ 
public function addReply(\Bundle\Entity\Node $children) 
{ 
    $this->children[] = $children; 

    return $this; 
} 

/** 
* Remove children 
* 
* @param \Bundle\Entity\Node $children 
*/ 
public function removeReply(\Bundle\Entity\Node $children) 
{ 
    $this->children->removeElement($children); 
} 

/** 
* Get children 
* 
* @return \Doctrine\Common\Collections\Collection 
*/ 
public function getChildren() 
{ 
    return $this->children; 
} 
} 

然後再次嘗試實體產生的命令。並且不要忘記更新模式。

+0

我有這個註釋已經在那裏(更新我的問題,向你展示更多的代碼)。該實體本身正在工作。我可以沒有問題地獲得其他屬性(例如getName())。 – bernhardh

+0

在編輯中添加構造函數是否可以解決您的問題?將孩子設置爲arraycollection。否則,我沒有想法。 –

+0

Ehm。正如你在我的問題中所看到的,我已經在之前做過了(如食譜中所描述的)。 – bernhardh