Doctrine 2: Как обрабатывать таблицы объединений с дополнительными столбцами

Как настроить таблицу соединений с дополнительными столбцами или связью "многие-ко-многим" с дополнительными свойствами в Doctrine 2?

Ответы

Ответ 1

Прежде всего, позвольте мне объяснить, что этого не существует:

Таблица соединений (также известная как таблица соединений или таблица перекрестных ссылок) - это таблица, которая связывает 2 (или более) других таблиц в одной базе данных по первичному ключу. Это означает, что таблица соединения будет содержать только внешние ключи, для этих дополнительных столбцов места нет.

Поэтому, когда вам нужны дополнительные столбцы в такой таблице, она больше не является просто "связью" между другими таблицами, а сама становится реальной таблицей!

С точки зрения Доктрины 2, у вас больше нет связи "многие ко многим" между двумя объектами, но вы получаете связь "один ко многим/многие к одному" между 3 объектами.

Продолжите читать здесь для более подробных объяснений:

Ответ 2

Во второй статье я предлагаю небольшое обновление. Вместо полного события используйте LifecycleCallback внутри самого объекта:

/**
 * @ORM\Entity
 * @ORM\Table(name="jobs")
 * @ORM\HasLifecycleCallbacks
 */
class Job
{
    // ...

    /**
     * @ORM\PreRemove
     */
    public function preRemoveCallback()
    {
        $this->setPerson(null);
        $this->setCompany(null);
    }
}