我想创建一个模型,它将使表用户引用表CustomFieldValue,而表CustomField也引用CustomFieldValue。CustomField value只有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字段,这些字段将2链接在一起,而不是实际的联接列名。

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

10-12 07:35
查看更多