Ver Mensaje Individual
  #4 (permalink)  
Antiguo 21/09/2011, 18:27
Avatar de masterpuppet
masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 10 meses
Puntos: 845
Respuesta: Doctrine 2 Symfony2

1 - Si la categoría es opcional si, es un ManyToMany con el id del post en la relación como unique.
2 - Lo que te sugiero es que a las propiedades no les agregues el nombre de la clase, esto es redundante:

Código PHP:
Ver original
  1. class Post
  2. {
  3.  
  4.    /**
  5.     * @ORM\Id
  6.     * @ORM\Column(type="integer")
  7.     * @ORM\GeneratedValue(strategy="IDENTITY")
  8.     */
  9.     protected $idpost;
  10.    ...
  11. }

en la clase Post declaras la propiedad idpost, es mas claro si simplemente la llamas id:

Código PHP:
Ver original
  1. class Post
  2. {
  3.  
  4.    /**
  5.     * @ORM\Id
  6.     * @ORM\Column(type="integer")
  7.     * @ORM\GeneratedValue(strategy="IDENTITY")
  8.     */
  9.     protected $id;
  10. }

algo similar con la categoría,

Código PHP:
Ver original
  1. class Post
  2. {
  3.    ...    
  4.     /**
  5.      * @ORM\ManyToOne(targetEntity="PostCategory", inversedBy="posts", cascade={"remove"})
  6.      * @ORM\JoinColumn(name="idpostcategory", referencedColumnName="id")
  7.      */
  8.     protected $postcategory;
  9. }

un post tiene una categoria, es mas claro:

Código PHP:
Ver original
  1. class Post
  2. {
  3.    ...  
  4.     /**
  5.      * @ORM\ManyToOne(targetEntity="PostCategory", inversedBy="posts", cascade={"remove"})
  6.      */
  7.     protected $category;
  8.  
  9. }

si prestas atencion veras que elimine @JoinColumn, utilízalo solamente cuando quieras personalizar algo, sino deja que doctrine se encargue, si sigues sus convenciones vas a escribir menos código .

3 - Si tienes un schema ya echo y a partir de este quieres utilizar doctrine tendrás que ajustar de las dos partes, pero doctrine no esta pensado para crear primero la bbdd y luego montar el domain model, sino que todo lo contrario, lo importante es el domain model, la bbdd no es mas que persistencia.

Cita:
Esa sería la única solución?, osea no puedo insertar la tabla post ni siquiera poniendo un ID existente de prueba en el mismo código?, por que en el mysql me funciona normal....
mysql(innodb) te deja insertar un registro sin la clave foránea correspondiente ?, en cuanto al insert si conoces el id puedes utilizar EntityManager#getReference, algo asi:

Código PHP:
Ver original
  1. $em = $this->get('doctrine')->getEntityManager();
  2.  
  3. $post = new Post();
  4. $post->setSubject('Nuevo Post');
  5. $post->setCategory($em->getReference('PostCategory', 1));
  6.  
  7. $em->persist($post);
  8. $em->flush();

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)