Доктрина - Многоуровневые модели, ссылающиеся на то же идентификационное поле в другой модели

У меня есть Модель Файлов и Несколько (в настоящее время 3) различные другие Модели (Статья, Задание, Событие), который может все иметь файлы, которые хранятся в Модели Файлов.

Проблема состоит в том, что, когда я генерирую таблицы через Инструмент CLI (./доктрина build-all-reload), я получаю это сообщение об ошибке:

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`))

Файл определяется как (Никакие отношения не определяются в этой определенной Модели):

columns:
  id:
    primary: true
    autoincrement: true
    type: integer(4)
  target_id: integer(4)
  filename: string(255)
[...]

Все 4 Модели имеют это определение отношения:

  relations:
    Files:
      type: many
      class: File
      local: id
      foreign: target_id

Это - Php-код, который Доктрина генерирует (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'));
}

Я понимаю, почему это происходит (Ограничения не могут быть установкой для нескольких таблиц), но понятия не имейте, как я мог решить эту проблему без mutltiple таблиц файлов или таблицы ассоциации.

Существует ли способ сказать Доктрине, что он не должен создавать отношения в модели File?

Какие-либо хорошие идеи?

9
задан smoove 19 May 2010 в 14:01
поделиться