sql >> Databasteknik >  >> RDS >> Mysql

Lära 2 och Många-till-många länktabell med ett extra fält

En Many-To-Many-association med ytterligare värden är inte en Many-To-Many, utan är verkligen en ny enhet, eftersom den nu har en identifierare (de två relationerna till de anslutna enheterna) och värden.

Det är också anledningen till att många-till-många-associationer är så sällsynta:du tenderar att lagra ytterligare egenskaper i dem, till exempel sorting , amount , etc.

Vad du förmodligen behöver är något i stil med följande (jag gjorde båda relationerna dubbelriktade, överväg att göra minst en av dem enkelriktad):

Produkt:

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;
}

Butik:

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;
}

Lager:

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. Konverteringen misslyckades när varchar-värdet 'simple' konverterades till datatyp int

  2. Hur kan jag slå samman kolumnerna från två tabeller till en utdata?

  3. Skickar en uppsättning värden till Oracle-proceduren för att använda i WHERE IN-satsen

  4. Joomla SQL Injection sårbarhet