Ich habe ein Filemodell und mehrere (derzeit 3) verschiedene andere Modelle (Artikel, Job, Ereignis), die Dateien enthalten können, die im Dateimodell gespeichert sind.Doktrin - Mehrere Modelle, die auf dasselbe ID-Feld in einem anderen Modell verweisen
Das Problem ist, dass, wenn ich die Tabellen über das CLI-Tool (./doctrine build-all-reload) erzeugen, ich diese Fehlermeldung:
SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot
add or update a child row: a foreign key constraint fails
(`my_database/articles`, CONSTRAINT `articles_id_files_target_id`
FOREIGN KEY (`id`) REFERENCES `files` (`target_id`))
Datei definiert ist (keine Beziehungen definiert definiert in diesem Modell):
columns:
id:
primary: true
autoincrement: true
type: integer(4)
target_id: integer(4)
filename: string(255)
[...]
Alle 4 Modelle haben diese Beziehung-Definition:
relations:
Files:
type: many
class: File
local: id
foreign: target_id
T ies ist die Php-Kodex, dass Lehre erzeugt (BaseFile.php):
public function setUp()
{
parent::setUp();
$this->hasOne('Publication', array(
'local' => 'target_id',
'foreign' => 'id'));
$this->hasOne('Event', array(
'local' => 'target_id',
'foreign' => 'id'));
$this->hasOne('Article', array(
'local' => 'target_id',
'foreign' => 'id'));
$this->hasOne('Job', array(
'local' => 'target_id',
'foreign' => 'id'));
}
Ich verstehe, warum dies geschieht (Die Einschränkungen nicht Setup für mehrere Tabellen sein können), haben aber keine Ahnung, wie ich dieses Problem lösen könnte Problem ohne verschiedene Dateitabellen oder eine Zuordnungstabelle.
Gibt es eine Möglichkeit, Doctrine mitzuteilen, dass es die Beziehungen im Dateimodell nicht erstellen soll?
Irgendwelche guten Ideen?
Könnte ich fragen, warum Sie es nicht mithilfe einer Zuordnungstabelle lösen? Es ist eine sehr flexible und effiziente Lösung, da Sie die gleiche Datei mit verschiedenen Inhaltstypen verknüpfen können, ohne sie mehrfach hochzuladen. Mit Ihrem aktuellen Modell ist das unmöglich ... – wimvds
Konnte ich das wirklich mit einer Assoziationstabelle lösen? Wie würde ich die Lehre über das Feld "Typ" wissen lassen? – smoove
Ich weiß nicht, wie man das mit der Doktrin machen kann, aber das Problem liegt wohl in der Doktrin, die eine Tabelle hinzufügt, die von einer anderen Tabelle abhängt ** bevor ** eine andere Tabelle erstellt wurde. –