php - Doctrine - ManyToOne 与表之间

标签 php mysql sql symfony doctrine

我想创建一个模型,该模型将有表用户引用表 CustomFieldValue 和表 CustomField 也引用 CustomFieldValue。 CustomFieldValue 将只有 id、value 和两列,一列来自用户,第二列来自 CustomField。我想要在注册表单中动态添加新字段等功能。这是个好主意吗?如果是,请帮助我使用此模型,因为它不起作用: 用户:

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

自定义字段值:

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

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 时不需要连接列,这已经告诉 doctrine 在该字段上查找连接列声明。对于 mappedBy 和 inversedBy 字段,这些是将两者链接在一起的字段,而不是实际的连接列名称。

关于php - Doctrine - ManyToOne 与表之间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22235882/

相关文章:

sql - OpenRecordSet 的数据类型不匹配错误

mysql - 使用 MySQL 的查询中的查询

php - 如何在 Zend 中使用 cookie?

php - fatal error :调用未定义的方法 Google_IO_Curl::authenticatedRequest()

mysql - 平均MySQL中的某个列值

MySQL存储过程用游标查找所有错误日期值

mysql - 如何根据小数的值将小数四舍五入为整数?

php - 如何使用计算日期在 MySQL 中一次更新多行

php - Wamp VS PHP : absolutely fine & accessible image path seems broken

加入 : SELECT only if multiple rows in join match