symfony2 doctrine onetoone完整的例子

时间:2013-12-18 16:54:36

标签: php symfony doctrine-orm doctrine

我尝试从示例 - http://docs.doctrine-project.org/en/latest/tutorials/composite-primary-keys.html#use-case-2-simple-derived-identity

创建onetoone关系

这是第二次尝试,首先是symfony 2 doctrine relation onetoone

Adres

<?php
/**
 * Created by PhpStorm.
 * User: grek
 * Date: 18.12.13
 * Time: 16:33
 */

namespace Miejsce\ObiektyBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity
 */
class Adres {

    /**
     * @var integer
     * @ORM\Column(type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;


    /**
     * @ORM\Column(type="string", length=64, nullable=true)
     */
    public $street;


    /**
     * @ORM\OneToOne(targetEntity="Miejsce\ObiektyBundle\Entity\User") */
    private $user;




}

用户

    <?php
/**
 * Created by PhpStorm.
 * User: grek
 * Date: 18.12.13
 * Time: 16:33
 */

namespace Miejsce\ObiektyBundle\Entity;


use Doctrine\ORM\Mapping as ORM;


/**
 * @ORM\Entity
 */
class User {


    /**
     * @var integer
     * @ORM\Column(type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;


    /**
     * @ORM\Column(type="string", length=64, nullable=true)
     */
    public $name;



    /**
     * @ORM\OneToOne(targetEntity="Miejsce\ObiektyBundle\Entity\Adres")
     */
    private $adres;


}

并拥有:php app / console doctrine:schema:update --force

php app / console doctrine:schema:update --force

[学说\共同\注解\ AnnotationException]
  [语义错误]属性Miejsce \ ObiektyBundle \ Entity \ Adres :: $ user中的注释“@Doctrine \ ORM \ Mapping”不是e
  xist,或无法自动加载                                                                                                那我可以有错误?

  • 错误在于语法 - 我有@ ORM / OneToOne但需要@ORM \ OneToOne现在正常工作! :)

2 个答案:

答案 0 :(得分:3)

答案在错误消息中。看看你们两个班级之间有什么不同。

/**
 * @Entity
 */

Vs:

/**
 * @ORM\Entity
 */

所以更新那个给你错误的那个。

修改

使用use Doctrine\ORM\Mapping as ORM;导入Doctrine的注释时,您需要使用@ORM\启动所有这些注释。注释阅读器将知道@ORM\Entity实际上意味着@Doctrine\ORM\Mapping\Entity,这是定义该注释的类。

答案 1 :(得分:2)

我不确定我是否完全理解您的要求,但您的注释设置不正确。

/**
 * @Entity

应该成为

/**
 * @ORM\Entity

并且

/**
 * @Id @Column...

应该成为

/**
 * @ORM\Id
 * @ORM\Column...

@OneToOne的相同内容应为@ORM\OneToOne

基本上,您没有正确添加注释前缀。您有use Doctrine\ORM\Mapping as ORM;,但您没有正确使用它。为您的注释添加前缀,这将使您前进。