Mysql
 sql >> база данни >  >> RDS >> Mysql

Доктрина 2 и таблица с връзки много към много с допълнително поле

Асоциацията много към много с допълнителни стойности не е много към много, а наистина е нов обект, тъй като вече има идентификатор (двете отношения към свързаните обекти) и стойности.

Това е и причината, поради която асоциациите много към много са толкова редки:склонни сте да съхранявате допълнителни свойства в тях, като например sorting , amount и др.

Това, от което вероятно се нуждаете, е нещо като следното (направих и двете отношения двупосочни, помислете да направите поне едно от тях еднопосочно):

Продукт:

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

Магазин:

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

Наличност:

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. ИЗХОДНА клауза в MySQL

  2. Обединяване на две таблици с различен брой колони

  3. Търсене в пълен текст с InnoDB

  4. Присъединяване към MySQL срещу ИЗПОЛЗВАНЕ?

  5. 'IF' в израза 'SELECT' - изберете изходна стойност въз основа на стойностите на колоните