Php 反向外键学说
我的实体用户和UserMeta之间有一个OneToOne关系 我想在User中访问UserMeta,但在mysql数据库的UserMeta表中设置外键:Php 反向外键学说,php,mysql,symfony,orm,doctrine,Php,Mysql,Symfony,Orm,Doctrine,我的实体用户和UserMeta之间有一个OneToOne关系 我想在User中访问UserMeta,但在mysql数据库的UserMeta表中设置外键: class User implements UserInterface{ /** * @ORM\Column(type="integer", unique=true) * @ORM\Id * @ORM\GeneratedValue(strategy="AUTO") */ private $
class User implements UserInterface{
/**
* @ORM\Column(type="integer", unique=true)
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @ORM\OneToOne(targetEntity="Foo\Bar\Entity\UserMeta", cascade={"persist"}, inversedBy="id_user")
* @ORM\JoinColumn(nullable=true)
* @ORM\Column(name="id_pro")
*/
private $proData;
}
class UserMeta{
/**
* @ORM\Column(type="integer", unique=true)
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @ORM\OneToOne(targetEntity="Foo\Bar\Entity\User", mappedBy="id_pro")
* @ORM\JoinColumn(nullable=true)
* @ORM\Column(name="id_user")
*/
private $user;
}
不管怎样,要用教义来做这件事?我想我误解了映射和反转属性。您的映射配置是错误的 在用户类中,它应为:
/**
* @ORM\OneToOne(targetEntity="Foo\Bar\Entity\UserMeta", cascade={"persist"}, inversedBy="user")
* @ORM\JoinColumn(nullable=true)
*/
private $proData;
/**
* @ORM\OneToOne(targetEntity="Foo\Bar\Entity\User", mappedBy="proData")
* @ORM\JoinColumn(nullable=true)
*/
private $user;
在UserMeta类中,它应该是:
/**
* @ORM\OneToOne(targetEntity="Foo\Bar\Entity\UserMeta", cascade={"persist"}, inversedBy="user")
* @ORM\JoinColumn(nullable=true)
*/
private $proData;
/**
* @ORM\OneToOne(targetEntity="Foo\Bar\Entity\User", mappedBy="proData")
* @ORM\JoinColumn(nullable=true)
*/
private $user;
您也不需要@ORM\Column指令,因为Doctrine2将自动为您执行此操作。Hi@MarcD,几个月前我写了一篇关于一对一映射的帖子。它也告诉你关于属性的倒数。如果你感兴趣,这里是链接。我看了你的图图,但是你的程序表中仍然有程序详细信息id no?product\u details\u id是当前表的(产品)列名,你引用了目标表的(产品详细信息)主键。或者在最好的情况下,您可以将当前表的主键映射到目标表的主键在我的product对象中,product表中没有外键?我只想在program_details表中有程序id,但我不关心双向关系。如果您提到mappedBy或inversedBy,它希望目标实体的mappedBy或inversedBy位。假设您从表A关联到表B。为了形成基本关系,您在实体A中提到了oneToOne/oneToMany/etc。但如果您在实体A中提到inversedBy或mappedBy,您需要在实体B中具有匹配的mappedBy(如果反转)或inversedBy(如果映射)属性。希望您能理解这一点。干杯