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 originalclass Post
{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
protected $idpost;
...
}
en la clase Post declaras la propiedad idpost, es mas claro si simplemente la llamas id:
Código PHP:
Ver originalclass Post
{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
protected $id;
}
algo similar con la categoría,
Código PHP:
Ver originalclass Post
{
...
/**
* @ORM\ManyToOne(targetEntity="PostCategory", inversedBy="posts", cascade={"remove"})
* @ORM\JoinColumn(name="idpostcategory", referencedColumnName="id")
*/
protected $postcategory;
}
un post tiene una categoria, es mas claro:
Código PHP:
Ver originalclass Post
{
...
/**
* @ORM\ManyToOne(targetEntity="PostCategory", inversedBy="posts", cascade={"remove"})
*/
protected $category;
}
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$em = $this->get('doctrine')->getEntityManager();
$post = new Post();
$post->setSubject('Nuevo Post');
$post->setCategory($em->getReference('PostCategory', 1));
$em->persist($post);
Saludos.