2013-12-18 4 views
3

я пытаюсь сделать onetoone отношения из примера - http://docs.doctrine-project.org/en/latest/tutorials/composite-primary-keys.html#use-case-2-simple-derived-identitySymfony2 учение 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 --f Orce

PHP приложение/консоль доктрина: Схема: обновление --force

[Учение \ Common \ Аннотации \ AnnotationException]
[Семантическая Error] Аннотация "@Doctrine \ ORM \ Mapping" в свойстве Miejsce \ ObiektyBundle \ Entity \ Adres :: $ user не e
xist или не может быть загружен автоматически.
Итак, у меня может быть ошибка?

  • ошибка была в синтаксисе - у меня есть @ ORM/OneToOne, но нужно @ORM \ OneToOne теперь работать нормально! :)
+0

В чем смысл всего этого поста? – Dheeraj

ответ

2

Я не уверен, что я точно понимаю, что вы просите, но ваши аннотации настроены неправильно.

/** 
* @Entity 

должен стать

/** 
* @ORM\Entity 

И

/** 
* @Id @Column... 

должен стать

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

То же самое для @OneToOne должен быть @ORM\OneToOne

В принципе, вы не префикс своих аннотаций правильно. У вас есть use Doctrine\ORM\Mapping as ORM;, но вы не используете его должным образом. Прикрепите свои аннотации, и это поможет вам.

+0

Я получаю этот синтаксис из документации доктрины [ссылка] (http://docs.doctrine-project.org/en/latest/tutorials/composite-primary-keys.html#use -case-2-simple-производная-идентичность) - я не могу использовать документацию доктрины? –

+0

вы не используете чистую доктрину. Вы используете доктрину внутри Symfony. '@ ORM' существует, поэтому вам не нужно включать несколько операторов' use'. Это упрощает вещи. Если вы хотите следовать документам доктрины вместо документов Symfony, продолжайте, но вы не можете ожидать копирования и вставки и заставить его работать. – Sehael

+0

ОК теперь понимаю - эта часть, но все же не понимаю, почему я не могу установить отношение onetoone, как в примере –

3

Ответ указан в сообщении об ошибке. Посмотрите, что отличает вас от двух классов.

/** 
* @Entity 
*/ 

Vs:

/** 
* @ORM\Entity 
*/ 

Так обновить тот, который дает вам эту ошибку.

редактировать

При импорте аннотаций Доктрине с use Doctrine\ORM\Mapping as ORM;, вам нужно, чтобы начать все эти аннотации с @ORM\. Аннотатор-читатель будет знать, что @ORM\Entity будет фактически означать @Doctrine\ORM\Mapping\Entity, который является классом, который определяет эту аннотацию.

+0

Я обновляю его, как вы пишете, но все еще не работает –

Смежные вопросы