Doctrine 2: How to handle join tables with extra columns

后端 未结 2 457
梦毁少年i
梦毁少年i 2020-12-04 19:35

How do I setup a join table with extra columns, or a many-to-many association with additional properties, in Doctrine 2?

相关标签:
2条回答
  • 2020-12-04 20:32

    First off, let me explain that this does not exist:

    A join table (also known as a junction table or cross-reference table) is a table that links 2 (or more) other tables together within the same database by primary key. This means that a join table will only contain foreign keys, there is no place for these extra columns.

    So when you need extra columns in such a table, it is no longer just a "link" between other tables, but becomes a real table on its own!

    In terms of Doctrine 2, you no longer have a many-to-many association between 2 entities, but get a one-to-many/many-to-one association between 3 entities.

    Continue reading here for more details explanations:

    • Doctrine 2: How to handle join tables with extra columns
    • More on one-to-many/many-to-one associations in Doctrine 2
    0 讨论(0)
  • 2020-12-04 20:42

    In the second article, I suggest a minor update. Instead of the full event, use a LifecycleCallback within the entity itself:

    /**
     * @ORM\Entity
     * @ORM\Table(name="jobs”)
     * @ORM\HasLifecycleCallbacks
     */
    class Job
    {
        // ...
    
        /**
         * @ORM\PreRemove
         */
        public function preRemoveCallback()
        {
            $this->setPerson(null);
            $this->setCompany(null);
        }
    }
    
    0 讨论(0)
提交回复
热议问题