2014-03-06 86 views
1

之間的表我想創建一個模型,該模型將引用表CustomFieldValue和表CustomField並引用CustomFieldValue。 CustomFieldValue將只有id,value和兩列,一個來自用戶,另一個來自CustomField。我想要像動態添加註冊表單中的新字段一樣的功能。這是個好主意嗎?如果有,請幫我這個模型,因爲它不工作: 用戶:學說 - ManyToOne與

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

    /** 
    * @ORM\Column(type="string", length=25, unique=true) 
    */ 
    private $username; 

    /** 
    * @ORM\Column(type="string", length=64) 
    */ 
    private $password; 


    /** 
    * @ORM\ManyToMany(targetEntity="Role", inversedBy="users",cascade={"persist"}) 
    * 
    */ 
    private $roles; 

    /** 
    * @ORM\Column(type="string", length=60, unique=true) 
    */ 
    private $email; 

    /** 
    * @ORM\Column(type="string", length=60) 
    */ 
    private $sex; 

    /** 
    * @ORM\ManyToMany(targetEntity="Region", inversedBy="users") 
    * @ORM\JoinColumn(name="region", referencedColumnName="id") 
    */ 
    private $region; 


    /** 
    * @ORM\ManyToMany(targetEntity="Type", inversedBy="users") 
    * @ORM\JoinColumn(name="type", referencedColumnName="id") 
    */ 
    private $type; 

    /** 
    * @ORM\Column(name="is_active", type="boolean") 
    */ 
    private $isActive; 


    /** 
    * @ORM\ManyToOne(targetEntity="CustomFieldValue",inversedBy="id") 
    * @ORM\JoinColumn(name="user_id", referencedColumnName="id") 
    */ 
    private $customValues; 

CustomFieldValue:

/** 
    * @var integer 
    * 
    * @ORM\Column(name="id", type="integer") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    private $id; 

    /** 
    * @var string 
    * 
    * @ORM\Column(name="value", type="string", length=255) 
    */ 
    private $value; 

    /** 
    *ORM\OneToMany(targetEntity="User", mapped-by="id") 
    *@ORM\JoinColumn(name="user_id", referencedColumnName="id") 
    */ 

    private $user; 


    /** 
    *@ORM\OneToMany(targetEntity="CustomField", mapped-by="id") 
    *@ORM\JoinColumn(name="field_id", referencedColumnName="id") 
    */ 

    private $field; 

的CustomField:

/** 
    * @var integer 
    * 
    * @ORM\Column(name="id", type="integer") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    private $id; 

    /** 
    * @var string 
    * 
    * @ORM\Column(name="name", type="string", length=255) 
    */ 
    private $name; 

    /** 
    * @var string 
    * 
    * @ORM\Column(name="type", type="string", length=255) 
    */ 
    private $type; 

    /** 
    * @var boolean 
    * 
    * @ORM\Column(name="required", type="boolean") 
    */ 
    private $required; 

    /** 
    * @ORM\ManyToOne(targetEntity="CustomFieldValue", inversedBy="id") 
    * @ORM\JoinColumn(name="customfield_id", referencedColumnName="id") 
    */ 
    private $customValues; 

回答

1

你的映射是一點點off:

用戶實體應該是:

/** 
* @ORM\ManyToOne(targetEntity="CustomFieldValue", inversedBy="user") 
* @ORM\JoinColumn(name="user_id", referencedColumnName="id") 
*/ 
private $customValues; 

CustomFieldValue應該是:

/** 
*ORM\OneToMany(targetEntity="User", mappedBy="customValues") 
*/ 
private $user; 


/** 
*@ORM\OneToMany(targetEntity="CustomField", mappedBy="customValues") 
*/ 

private $field; 

的CustomField應該是:

/** 
* @ORM\ManyToOne(targetEntity="CustomFieldValue", inversedBy="field") 
* @ORM\JoinColumn(name="customfield_id", referencedColumnName="id") 
*/ 
private $customValues; 

你不需要,當你調用mappedBy這已經告訴學說尋找聯接列聯接列該領域的聲明。對於mappedBy和inversedBy字段,這些字段將2連接在一起而不是實際的連接列名稱。

+0

嗨。感謝您的迴應:)但它一般警告:映射Flomedia \ UserBundle \ Entity \ CustomFieldValue#字段和Flomedia \ UserBundle \ Entity \ CustomField#customValues彼此不一致。你能告訴我什麼是不正確的嗎?而且,你能向我解釋一下,映射和反轉是什麼? – user3025978

+0

這是一個複數問題,您需要確保屬性名稱匹配。我已經更新了我的答案,以便它們匹配 – Chausser

+0

好吧..我不知道它是如何工作的。在用戶表中,我有一個名爲user_id的strage列,我不想要它,所以我將user_id更改爲代碼中的id,並且在CustonField中也出現了相同的情況。我現在生成了3張表 - 用戶 - 沒關係。 CustomField - 沒關係,CustomFieldValue - 它沒有任何引用User和CustomField的字段:(它只有id和value字段,如果我不更改user_id給用戶,我的數據庫將不會引用用戶/自定義字段和自定義字段值... – user3025978