Définir la valeur de la clé Primay avec la stratégie définie sur aucun
-
28-09-2019 - |
Question
J'ai un cours d'entité qui ressemble à ceci:
<?php
namespace Entities;
/** @Entity @Table(name="User") */
class User
{
/**
* @Id
* @Column(type="string", length=12)
*/
private $no;
Basé sur la section de stratégie de génération d'identification de la doctrine 2:
Aucun: dit à la doctrine que les identifiants sont attribués (et donc générés) par votre code. L'affectation doit avoir lieu avant qu'une nouvelle entité ne soit transmise à EntityManager # persiste. Aucune n'est la même que de laisser entièrement @GeneratedValue.
Cela signifie que j'ai besoin d'un moyen pour que je puisse définir la valeur avant d'appeler persister.
Appel ./doctrine orm:generate-entities
Ne générerait pas de fonction de setter, dois-je l'écrire manuellement dans la classe?
/**
* Set no
*
* @param string $no
*/
public function setNo($no)
{
$this->no = $no;
}
Est-ce la bonne façon de le faire?
La solution
Il n'y a pas de moyen "correct" de le faire. La commande générate-entités n'est qu'un aide. Rien que vous avez à utiliser. Vous pouvez faire ce que vous voulez.
La seule exigence avec la stratégie attribuée est que le champ ID doit être non nul lorsque $ em-> persist () est appelé.
Par exemple, dans le cas d'un ID attribué, il est logique d'en faire un paramètre requis dans le constructeur:
class User
{
private $no;
public function __construct($no)
{
$this->no = $no;
}
}