Tengo un modelo de archivos y varios (actualmente 3) diferentes otros modelos (artículo, trabajo, evento) que pueden tener todos los archivos almacenados en el modelo de archivos.Doctrine: varios modelos que hacen referencia al mismo campo de ID en otro modelo
El problema es que cuando me generan las tablas a través de la CLI-Herramienta (./doctrine acumulación de todo recarga), me sale este mensaje de error:
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`))
del archivo se define como (No son las relaciones definido en este modelo definido):
columns:
id:
primary: true
autoincrement: true
type: integer(4)
target_id: integer(4)
filename: string(255)
[...]
Los 4 modelos tienen esta relación definición:
relations:
Files:
type: many
class: File
local: id
foreign: target_id
T suyo es el código PHP que genera Doctrina (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'));
}
entiendo por qué esto sucede (Las restricciones no se pueden configurar para múltiples mesas), pero no tienen idea de cómo podría resolver este problema sin varias tablas de archivos o una tabla de asociación.
¿Hay alguna manera de decirle a Doctrine que no debe crear las relaciones en el modelo de archivo?
¿Alguna buena idea?
¿Puedo preguntar por qué no lo resuelve utilizando una tabla de asociación? Es una solución muy flexible y eficiente, ya que le permitirá vincular el mismo archivo a diferentes tipos de contenido sin cargarlo varias veces. Con su modelo actual esto es imposible ... – wimvds
¿Podría realmente resolver esto con una tabla de asociación? ¿Cómo dejaré que la doctrina sepa sobre el campo "tipo"? – smoove
No sé cómo hacer que esto suceda con la doctrina, pero el problema probablemente radique en que la doctrina agregue una tabla que depende de otra tabla ** antes ** de que se haya creado otra tabla. –