Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Doctrine 2 i tabela łączy wiele do wielu z dodatkowym polem

Skojarzenie wiele-do-wielu z dodatkowymi wartościami nie jest skojarzeniem wiele-do-wielu, ale w rzeczywistości jest nową encją, ponieważ ma teraz identyfikator (dwie relacje z połączonymi encjami) i wartości.

Jest to również powód, dla którego skojarzenia wiele-do-wielu są tak rzadkie:zwykle przechowujesz w nich dodatkowe właściwości, takie jak sorting , amount itp.

To, czego prawdopodobnie potrzebujesz, to coś w rodzaju następującego (uczyniłem obie relacje dwukierunkowymi, rozważ zrobienie przynajmniej jednej z nich jednokierunkowej):

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

Sklep:

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

Dostępność:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Poprawa wydajności MySQL dzięki zaawansowanym ustawieniom InnoDB

  2. Zainstaluj serwer WWW w Windows XP z Apache2, PHP5 i MySQL4 – część 4

  3. Napraw Odmowa dostępu dla użytkownika 'root'@'localhost' dla phpMyAdmin

  4. ProxySQL:wszystkie zasoby Kilkadziesiąt dziewięć

  5. TIMEDIFF() vs SUBTIME() w MySQL:jaka jest różnica?