sql >> Database >  >> RDS >> Mysql

Doctrine 2 en Veel-op-veel-linktabel met een extra veld

Een Many-To-Many-associatie met aanvullende waarden is geen Many-To-Many, maar is inderdaad een nieuwe entiteit, aangezien deze nu een identifier (de twee relaties met de verbonden entiteiten) en waarden heeft.

Dat is ook de reden waarom Many-To-Many-associaties zo zeldzaam zijn:je hebt de neiging om er extra eigenschappen in op te slaan, zoals sorting , amount , enz.

Wat je waarschijnlijk nodig hebt, is zoiets als het volgende (ik heb beide relaties bidirectioneel gemaakt, overweeg om er minstens één unidirectioneel te maken):

Product:

namespace Entity;

use Doctrine\ORM\Mapping as ORM;

/** @ORM\Table(name="product") @ORM\Entity() */
class Product
{
    /** @ORM\Id() @ORM\Column(type="integer") */
    protected $id;

    /** ORM\Column(name="product_name", type="string", length=50, nullable=false) */
    protected $name;

    /** @ORM\OneToMany(targetEntity="Entity\Stock", mappedBy="product") */
    protected $stockProducts;
}

Winkel:

namespace Entity;

use Doctrine\ORM\Mapping as ORM;

/** @ORM\Table(name="store") @ORM\Entity() */
class Store
{
    /** @ORM\Id() @ORM\Column(type="integer") */
    protected $id;

    /** ORM\Column(name="store_name", type="string", length=50, nullable=false) */
    protected $name;

    /** @ORM\OneToMany(targetEntity="Entity\Stock", mappedBy="store") */
    protected $stockProducts;
}

Voorraad:

namespace Entity;

use Doctrine\ORM\Mapping as ORM;

/** @ORM\Table(name="stock") @ORM\Entity() */
class Stock
{
    /** ORM\Column(type="integer") */
    protected $amount;

    /** 
     * @ORM\Id()
     * @ORM\ManyToOne(targetEntity="Entity\Store", inversedBy="stockProducts") 
     * @ORM\JoinColumn(name="store_id", referencedColumnName="id", nullable=false) 
     */
    protected $store;

    /** 
     * @ORM\Id()
     * @ORM\ManyToOne(targetEntity="Entity\Product", inversedBy="stockProducts") 
     * @ORM\JoinColumn(name="product_id", referencedColumnName="id", nullable=false) 
     */
    protected $product;
}


  1. Verbinding maken met MySQL met Python

  2. SQLite-gegevenstypen

  3. Tabel opzoeken in SortCL-compatibele IRI-taken

  4. Hoe Sqlite-database te herstellen na een back-up van Android