2012-08-08 4 views
15

J'ai une table avec Produits et une autre table avec Notes. Chaque produit peut avoir ou non des notes. Je n'ai besoin que des notes pour savoir à quel produit elles sont référées, mais le produit ne doit pas connaître ses notes. Je pense que cela devrait être mon code:Utilisation de l'instruction pour @OneToOne - Doctrine2

namespace EM\MyBundle\Entity; 

use Doctrine\ORM\Mapping as ORM; 

use EM\MyBundle\Entity\Productss; 

/** 
* @ORM\Entity 
* @ORM\Table(name="notes") 
*/ 
class Notess 
{ 
/** 
* @ORM\Id 
* @ORM\Column(type="integer") 
* @ORM\GeneratedValue(strategy="AUTO") 
*/ 
protected $id; 

/** 
* @OneToOne(targetEntity="Productss") 
* @JoinColumn(name="products_id", referencedColumnName="id") 
**/ 
private $products; 
//... 
} 

namespace EM\MyBundle\Entity; 

use Doctrine\ORM\Mapping as ORM; 
use Symfony\Component\Validator\Constraints as Assert; 

/** 
* @ORM\Entity 
* @ORM\Table(name="domains") 
*/ 
class Domains 
{ 
/** 
* @ORM\Id 
* @ORM\Column(type="integer") 
* @ORM\GeneratedValue(strategy="AUTO") 
*/ 
protected $id; 
// ... 
} 

mais il donne une erreur: [Doctrine \ Common Files \ Annotations \ AnnotationException]

[Erreur Sémantique] L'annotation "@OneToOne" dans la propriété EM \ MyBundle \ L'entité \ Notes :: $ products n'a jamais été importée. Avez-vous oublié d'ajouter une instruction "use " pour cette annotation?

Pouvez-vous s'il vous plaît aidez-moi à résoudre ce problème?

Répondre

51

Je pense que vous vouliez utiliser @ORM\OneToOne à la place ...

/** 
* @ORM\OneToOne(targetEntity="Productss") 
* @ORM\JoinColumn(name="products_id", referencedColumnName="id") 
*/ 
private $products; 
//... 
} 
+0

Merci beaucoup! Il fonctionne maintenant! :) – Faery

+0

Ce problème se pose quel que soit le type de relation: oneToMany, oneToOne ou manyToMany, à cause de la documentation. J'ai eu le même problème que de faire un copier/coller de la documentation officielle: http://docs.doctrine-project.org/en/latest/reference/association-mapping.html –

+2

Ce serait parce que la documentation de la doctrine vous suppose serait 'use'ing chaque classe' @ 'de sorte que toutes les annotations utilisent le nom de classe réel (' use Doctrine/ORM/Mapping/OneToOne' => '@ OneToOne'), où Symfony recommande' use Doctrine \ ORM \ Mapping AS ORM' approche de l'espace de noms de sorte que toutes les annotations utilisent l'ORM comme base ('@ORM \ OneToOne'). – qooplmao