У меня есть две таблицы. Я хочу установить отношения «один ко многим», а также отношения «много-к-одному».Отношение доктрины «один ко многим» и много-к-одному
Страница может иметь один фон - это фон страницы.
На странице также может быть много фона - это набор загруженных пользователем фонов, из которых один будет выбран для первых отношений.
Другими словами, пользователь выбирает фон из кучи предопределенных фонов или один из многих фонов, которые он загрузил, чтобы опробовать.
Редактировать: При удалении фона я хочу, чтобы все страницы с этим background_id имели значение background_id равным null. При удалении страницы я хочу, чтобы все пользовательские фоны, принадлежащие этой странице, были удалены.
В то время как доктрина и symfony разрешают указанную выше конфигурацию при удалении страницы Doctrine полностью игнорирует cascade = "{remove}" в свойстве Backgrounds, и, конечно, возникает исключение при попытке удалить страницу перед удалением ее пользовательских фонов ,
Что я делаю неправильно?
class Background
{
/**
* @var string
*
* This attribute is for user uploaded backgrounds.
*
* @ORM\ManyToOne(targetEntity="Page",inversedBy="customBackgrounds")
* @ORM\JoinColumn(name="page_id",referencedColumnName="id")
*/
protected $page;
/**
* @var string
*
* This field helps admins to gauge popularity
*
* @ORM\OneToMany(targetEntity="Page",mappedBy="background")
*/
protected $pages;
}
class Page
{
/**
* @var string
*
* @ORM\ManyToOne(targetEntity="Background",inversedBy="pages")
* @ORM\JoinColumn(name="background_id",referencedColumnName="id", nullable=true, onDelete="SET NULL")
*/
protected $background;
/**
* @ORM\OneToMany(targetEntity="Background", mappedBy="page", cascade={"remove"})
* @ORM\OrderBy({"id" = "ASC"})
*/
protected $customBackgrounds;
}
Следует отметить, что удаление свойства $ background и аннотации отношений ManyToOne прекрасно восстанавливает функциональность удаления каскада при удалении страницы (удаление ее пользовательских фонов) - но это, конечно, не то, что я хочу делать. – darkbluesun
dariusphp успешно разрешил мою проблему, но для меня это не имеет никакого смысла. Я использую cascade = {"remove"} для удаления других связанных объектов при удалении, и я не использую 'onDelete =" SET NULL "для них. Я обнаружил, что 'onDelete =" SET NULL "' работает на уровне dbms для сирот связанных объектов, когда их родительский объект удален. Как это помогает доктрине удалять связанные объекты, когда их родитель удален? – darkbluesun