クエリの明確化
元の質問では、ユーザーは追加のフィールドを含むリンク テーブル内で多対多のリレーションシップを作成するためのガイダンスを求めていました。 (在庫量)。この課題は、Doctrine を使用して在庫量の値にアクセスし、データベースのテーブル構造を生成するときに発生しました。
問題への対処
この問題は、多対- 追加の値との多くの関係は、そのように扱うことができます。ただし、追加の値を持つ多対多の関係は、識別子と値を持つ新しいエンティティになります。
解決策
この解決策には、Stock という別個のエンティティの作成が含まれます。次の列:
これにより、システムは多対多の関係を正確にモデル化し、Doctrine を使用して在庫量の値にアクセスできるようになりました。
更新されたエンティティ
以下は調整されたものです 実在物定義:
製品:
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; }
Sto re:
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; }
データベース構造
この変更により、データベース構造は以下に示すようになりました:
CREATE TABLE product ( id INT NOT NULL, product_name VARCHAR(50) NOT NULL, PRIMARY KEY (id) ); CREATE TABLE store ( id INT NOT NULL, store_name VARCHAR(50) NOT NULL, PRIMARY KEY (id) ); CREATE TABLE stock ( amount INT NOT NULL, store_id INT NOT NULL, product_id INT NOT NULL, PRIMARY KEY (store_id, product_id), FOREIGN KEY (store_id) REFERENCES store (id), FOREIGN KEY (product_id) REFERENCES product (id) );
以上がDoctrine 2 で追加フィールドを使用した多対多の関係を処理するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。