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