Je fais un projet avec symfony et api platform.

J'ai 2 entités assez simple. (ligne de la commande et entete de la commande), mon problème c'est qu'ils sont lié par un champs qui n'est pas une clé primaire, ni secondaire. c'est un simple champ texte de chaque coté (sur les 2 entités) , j'ai une contrainte, c'est que je ne peux pas modifier la base de donnée, donc impossible de faire en sorte que ca devienne une clé primaire...

Voici mon code :

class enteteCommande
{
/**
 * @var int
 *
 * @ORM\Column(name="I_ID", type="integer", nullable=false)
 * @ORM\Id
 * @ORM\GeneratedValue(strategy="IDENTITY")
 */
private $IId;

 /**
 * @var string
 *
 * @ORM\Column(name="C_CDE_NUMERO", type="string", length=50, nullable=true)
 *
 */
#[Groups(['write:commande'])]
private $CCdeNumero;
 /**
 *
 * @ORM\ManyToMany(targetEntity="lignesCommande", mappedBy="enteteLigne")
 *
 */ 
private $detailLigne;

class lignesCommande
{

/**
 * @varint
 *
 * @ORM\Column(name="I_IDL", type="integer", nullable=false)
 * @ORM\Id
 * @ORM\GeneratedValue(strategy="IDENTITY")
 */
private $IIdL;
 /**
 * @varstring|null
 *
 * @ORM\Column(name="LIGNE_C_CDE_NUMERO", type="string", length=50, nullable=true)
 */
private $ligneCCdeNumero;

 /**
 * 
 * 
 *  @ORM\ManyToMany(targetEntity="enteteCommande", inversedBy="detailLigne")
 *  @ORM\JoinColumn(name="LIGNE_C_CDE_NUMERO", referencedColumnName="C_CDE_NUMERO")
 * 
 */ 
private $enteteLigne;

Mon schéma de bdd
enteteCommande
I_ID -> Id de l'entete
C_CDE_NUMERO -> champ texte pour ma relation, exemple : EXE1321564

lignesCommande
I_IDL -> id de la ligne
LIGNE_C_CDE_NUMERO -> champ texte pour ma relation, exemple : EXE1321564

Voici l'erreur que j'obtiens :
The referenced column name 'id' has to be a primary key column on the target entity class 'App\Entity\OrderLignes'. The referenced column name 'id' has to be a primary key column on the target entity class 'App\Entity\OrderEntete'

Comment faire une relation avec doctrine sans que le champ soit une clé ?

Merci de votre aide

1 réponse


Salut,

Je ne connais pas les API Platform, mais j'ai une suggestion.
D'après ce que je comprends, le problème vient du fait que Symfony essaie de récupérer les données en fonction de l'ID.

Je te propose de récuprérer toutes les données et de vois si tu obtiens la même erreur.
Tout dépend du nombre de ligne que contiennent tes tables, mais tu verras si l'erreur est toujours là ou pas.