С Doctrine часто может быть лучше определить отношения только на одной стороне (обычно на стороне владельца) и позволить Doctrine решить остальную часть. Здесь у вас есть каскадное удаление, которое, похоже, идет в обе стороны. Попробуйте изменить схему на:
File:
columns:
id:
type: integer
primary: true
autoincrement: true
...
relations:
...
Revisions:
class: FileDetail
local: id
foreign: file_id
type: many
cascade: [delete]
FileDetail:
columns:
id:
type: integer
primary: true
autoincrement: true
file_id: integer
и оставьте cascade
только на стороне файла. Таким образом, когда вы удаляете файл, связанные с ним записи FileDetail также будут удалены. Я также изменил псевдоним на Revisions в соответствии с вашей исходной схемой, так что вы сможете сделать:
$file->Revisions->{some FileDetail field here}
что я думаю, что вы были после. Я удалил поле filedetail_id из вашей записи File, так как если у вас может быть много записей FileDetail на файл, ваша запись File не сможет хранить все идентификаторы этих записей в одном целочисленном поле.
И, наконец, я добавил type: many
к стороне владельца, поэтому Doctrine знает, что это отношение один-ко-многим со стороны Файла.