Php 条令-多通带表

Php 条令-多通带表,php,mysql,sql,symfony,doctrine,Php,Mysql,Sql,Symfony,Doctrine,我想创建一个模型,该模型将有参考表CustomFieldValue的表用户和参考CustomFieldValue的表CustomField。CustomFieldValue将只有id、value和两列,一列来自用户,另一列来自CustomField。我想有一个功能,像一个动态添加一个新的登记表字段。这是个好主意吗?如果是,请帮助我使用此型号,因为它不工作: 用户: CustomFieldValue: /** * @var integer * * @ORM\Colum

我想创建一个模型,该模型将有参考表CustomFieldValue的表用户和参考CustomFieldValue的表CustomField。CustomFieldValue将只有id、value和两列,一列来自用户,另一列来自CustomField。我想有一个功能,像一个动态添加一个新的登记表字段。这是个好主意吗?如果是,请帮助我使用此型号,因为它不工作: 用户:

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; 
自定义字段:

 /**
     * @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;

您的映射有点不正确:

用户实体应为:

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


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

private $field; 
CustomFieldValue应为:

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


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

private $field; 
自定义字段应为:

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

调用
mappedBy
时不需要连接列,这已经告诉doctrine在该字段上查找连接列声明。对于mappedBy和inversedBy字段,这些字段将2链接在一起,而不是实际的联接列名。

Hi。感谢您的回复:)但它给出了以下警告:Flomedia\UserBundle\Entity\CustomFieldValue#字段和Flomedia\UserBundle\Entity\CustomField#customvalue之间的映射不一致。你能告诉我什么是不正确的吗?此外,你能解释一下mappedBy和inversedBy是什么吗?这是一个复数问题,你需要确保属性名称匹配。我已经更新了我的答案,以便他们匹配OK。。我不知道它是怎么工作的。在用户表中,我有一个名为User\u id的列,我不想要它,所以我在代码中将User\u id更改为id,在CustonField中也是这样。我现在已经生成了3个表-用户-没问题。CustomField-正常,CustomFieldValue-没有任何字段引用到用户和CustomField:(它只有id和值字段。若我不将user_id更改为user,我的数据库将不会在user/CustomField和CustomFieldValue之间进行引用…这并不粗鲁,但听起来您可能需要稍微了解一下关联。看看他们有很好的示例和不同类型的解释。