我想创建一个模型,它将使表用户引用表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/