Problema al generar los métodos setter y getter en symfony

Hola a todos, escribo en esta oportunidad porque tengo una duda al generar los métodos getter y setter de una entidad: ¿siempre tiene que generarse un id? Porque tengo un caso que la entidad el campo primario es la cédula. Para mi no sería necesario agregar el id pero, ¿lo permite Symfony o se tiene que agregar el id a todas las entidades?

Estoy trabajando con symfony 3.

Respuestas

#1

En primer lugar, cualquier cosa que tenga que ver con la base de datos, no es responsabilidad de Symfony. Para estas cosas, Symfony usa una librería externa llamada Doctrine.

Contestando a tu pregunta, Doctrine sí que permite definir entidades si la propiedad id. Puedes hacer que tu clave primaria sea cualquier otra propiedad de la entidad. Y también puedes crear claves compuestas por más de una propiedad.

Dicho esto, mi recomendación personal es que siempre utilices una clave primaria simple llamada id. Aunque no la utilices directamente en tu aplicación, te va a simplificar mucho tu trabajo (para la mayoría de aplicaciones). Si utilizas tu propia clave primaria, es posible por ejemplo que algunos bundles de terceros no funcionen como debería porque no están preparados para eso.

#2

Efectivamente como dice @javiereguiluz, puedes usar ese id, no se si esto sea una buena practica pero lo que podrías hacer es cambiar el strategy del id de la entidad que usas así:

/**
     * @var string
     *
     * @ORM\Column(name="id", type="string", length=20)
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="NONE") //aqui se hace el cambio.
     */
    protected $id;

Después lo que harías es utilizar en comando:

php bin/console doctrine:generate:entities "carpeta_donde_quieres_hacer_los_cambios_de_la(s)_entidad(es)"

Esto lo haces para hacer cambios en las entidades y obtener el getter-setter del id.

Para finalizar realizas una actualización en la base de datos con el comando:

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

Con esto el id en la base de datos dejara de usar el AUTO_INCREMENT y podras usar el id para el proposito que quieres.

Un saludo.