Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 反向外键学说_Php_Mysql_Symfony_Orm_Doctrine - Fatal编程技术网

Php 反向外键学说

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 $

我的实体用户和UserMeta之间有一个OneToOne关系

我想在User中访问UserMeta,但在mysql数据库的UserMeta表中设置外键:

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(如果映射)属性。希望您能理解这一点。干杯