ich ein ER-Modell für mein Projekt erstellt und implementiert sie in PHP und addierte die folgenden maaping Informationen:Ich bin nicht in der Lage eines Objekt, mit Lehre zu beharren, dass einen zusammengesetzten Primärschlüssel hat, die einen Fremdschlüssel enthält
AppBundle\Entity\Competition:
type: entity
id:
id:
type: integer
generator:
strategy: AUTO
fields:
name:
location:
date:
type: datetime
lifecycleCallbacks: { }
oneToMany:
runs:
targetEntity: Run
mappedBy: comp
cascade: [persist]
,
AppBundle\Entity\Run:
type: entity
id:
id:
type: integer
comp:
associationKey: true
fields:
name:
lifecycleCallbacks: { }
manyToOne:
comp:
targetEntity: Competition
inversedBy: runs
und
AppBundle\Entity\Participate:
type: entity
id:
athlete:
associationKey: true
run:
associationKey: true
comp:
associationKey: true
fields:
number:
type: integer
lifecycleCallbacks: { }
manyToOne:
athlete:
targetEntity: Athlete
cascade: [persist]
run:
targetEntity: Run
cascade: [persist]
comp:
targetEntity: Run
cascade: [persist]
EDIT: Run sollte man sein ak Entität, also denke ich, dass ich die 2 Relationen zu Run brauche. Zuerst für den Lauf selbst und zweitens für den Wettbewerb gehört der Lauf dazu.
mit Wettbewerb Arbeiten und Run wirkt wie ein Zauber, ich kann sie bestehen bleiben und holen, aber sobald ich versuche, ein Objekt von Teilnehmen bestehen bleiben, bekomme ich folgende Fehlermeldung:
Binding an entity with a composite primary key to a query is not supported. You should split the parameter into the explicit fields and bind them separately.
Ich benutze der folgende Code:
$em = $this->getDoctrine()->getManager();
$em->persist($participate);
$em->flush();
Ich weiß nicht, was ich tun soll, um dieses Problem zu beheben.
Dank
EDIT2:
Ich verstehe nur, dass theoretisch, ich die Beziehung nicht brauche comp
in Participate
, wie es bereits in Run
ist und die Run
Objekte sind einzigartig. Aber wenn ich möchte, dass meine Datenbank entsprechend aktualisieren, gibt Lehre mir die folgende SQL:
ALTER TABLE Participate DROP FOREIGN KEY FK_8B9E3EEF4D0D3BCB;
DROP INDEX IDX_8B9E3EEF4D0D3BCB ON Participate;
ALTER TABLE Participate DROP PRIMARY KEY;
ALTER TABLE Participate DROP comp_id;
ALTER TABLE Participate ADD PRIMARY KEY (athlete_id, run_id);
die den Fremdschlüssel zu Competition
in Participate
entfernen würden. Aber run_id
ist nicht als eindeutig definiert, weil es ein schwacher Schlüssel sein sollte.
Aber dies würde eine Beziehung zwischen Teilnehmen und Wettbewerb machen. Teilnehmen sollte jedoch nur in Bezug auf Run, die eine zusammengesetzte PK hat. – exastion
Warum also nicht einfach eine zwischengeschaltete Entität erstellen, um sie nicht zweimal zu verwenden? – user3504263
Ich verstehe das nicht wirklich. Ich habe einige Informationen in der Frage hinzugefügt. – exastion