2016-12-04 175 views
0

什麼值這個inversedBy註釋還有mappedBy註釋裏面去? 什麼是targetEntity和referencedColumnName?(教義)的mappedBy和inversedBy和targetEntity註釋

這是我comment entity的一個例子。如您所見,在我的教程中,它說要在inversedBy屬性內編寫字符串comments,並在targetREntity屬性內編寫\Application\Entity\Post

/** 
* This class represents a comment related to a blog post. 
* @ORM\Entity 
* @ORM\Table(name="comment") 
*/ 
class Comment 
{ 

    /** 
    * @ORM\ManyToOne(targetEntity="\Application\Entity\Post", inversedBy="comments") 
    * @ORM\JoinColumn(name="post_id", referencedColumnName="id") 
    */ 
    protected $post; 
} 

對於這一個,它說comments這個評論字符串究竟是指什麼? 我不知道評論意味着什麼。這是映射到一個表,或頂部的類的ORM名稱,或其他東西。

此外,

這裏是用來mappedBy的例子:

/** 
* @ORM\Entity 
* @ORM\Table(name="post") 
*/ 
class Post 
{ 
    // Post status constants. 
    const STATUS_DRAFT  = 1; // Draft. 
    const STATUS_PUBLISHED = 2; // Published. 

    /** 
    * @ORM\OneToMany(targetEntity="\Application\Entity\Comment", mappedBy="post") 
    * @ORM\JoinColumn(name="id", referencedColumnName="post_id") 
    */ 
    protected $comments; 

我開始閱讀關於owning sides and inverse sidesclick here,但它是非常難以理解。

這裏的任何細節都會很棒。

任何幫助將是巨大的。

回答

1

我不指望主義,但我使用它的工作了一段時間,所以我會盡力解釋我所知道的這麼遠。

InversedBy指的是$comments物業(場)在Post實體,反之亦然。

反面必須使用OneToOne,OneToMany或ManyToMany映射聲明的mappedBy屬性。 mappedBy屬性 包含擁有端的關聯字段的名稱。

擁有方必須使用OneToOne,ManyToOne或ManyToMany映射聲明的inversedBy屬性。 inversedBy屬性 包含反面的關聯字段的名稱。

當您使用@ORM\ManyToOne註釋時,您將創建n:1 relationship。有三種types of mapping

  • 雙向 - Post可以訪問Comment反之亦然
  • 單向 - Post$comments場十足Comment實體,但你不會有訪問Post能力從Comment,因爲它沒有映射回
  • 自引用 - Category自我參照於母公司Category這是同類型的實體

TargetEntity告訴你正在創建關係哪個實體。想象一下外鍵。當你創建外鍵時,你需要指定引用表。

ReferencedColumnName告訴應該創建哪個列外鍵。

主義並不神奇。它只是對象關係映射。考慮一下當你使用SQL創建關係時。很多東西都差不多。