基本思想:我有4个教义实体:产品,商店,产品发生和价格。产品出现在一个或多个商店中,价格与产品和商店挂钩。
因此,例如笔记本电脑 A(A Product
(由商店 A 和商店 B 销售(因此数据库中有 2 个ProductOccurence
实例,链接到相同的Product
,但不同的Shop
实体(,并且具有商店 A 中的 3 个标价和商店 B 中的 4 个价格的历史记录(因此实体Price
表中有 7 个实例(。
当我 doctrine:schema:create 时,我收到此错误:
[Doctrine'ORM'ORMException]
Column name `product_id` referenced for relation from TRP'ModelBundle'Entity'Price towards TRP'ModelBundle'Entity'ProductOccurence does not exist.
删除Price::$occurence
的注释(具有多个连接列的注释(可以解决问题,但我想首先了解它为什么会出现。谢谢!
这是Product.php
的一部分
/**
* Product
*
* @ORM'Table(name="products")
* @ORM'Entity
*/
class Product
{
/**
* @var integer
*
* @ORM'Column(name="id", type="integer")
* @ORM'Id
* @ORM'GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var 'Array
*
* @ORM'OneToMany(targetEntity="ProductOccurence", mappedBy="product")
*/
private $occurences;
/**
* @var 'Array
*
* @ORM'OneToMany(targetEntity="Price", mappedBy="product")
*/
private $priceHistory;
这是ProductOccurence.php
的一部分
/**
* ProductOccurence
*
* @ORM'Table(name="product_occurences")
* @ORM'Entity
*/
class ProductOccurence
{
/**
* @var integer
*
* @ORM'Column(name="id", type="integer")
* @ORM'Id
* @ORM'GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var Product
*
* @ORM'ManyToOne(targetEntity="Product", inversedBy="occurences")
* @ORM'JoinColumn(name="product_id", referencedColumnName="id")
*/
private $product;
/**
* @var Shop
*
* @ORM'ManyToOne(targetEntity="Shop")
* @ORM'JoinColumn(name="shop_id", referencedColumnName="id")
*/
private $shop;
/**
* @var 'Array
*
* @ORM'OneToMany(targetEntity="Price", mappedBy="occurence")
*/
private $prices;
这是Price.php
的一部分
/**
* Price
*
* @ORM'Table(name="prices")
* @ORM'Entity
*/
class Price
{
/**
* @var integer
*
* @ORM'Column(name="id", type="integer")
* @ORM'Id
* @ORM'GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var Product
*
* @ORM'ManyToOne(targetEntity="Product", inversedBy="priceHistory")
* @ORM'JoinColumn(name="product_id", referencedColumnName="id")
*/
private $product;
/**
* @var Shop
*
* @ORM'ManyToOne(targetEntity="Shop")
* @ORM'JoinColumn(name="shop_id", referencedColumnName="id")
*/
private $shop;
/**
* @var ProductOccurence
*
* @ORM'ManyToOne(targetEntity="ProductOccurence", inversedBy="prices")
* @ORM'JoinColumns({
* @ORM'JoinColumn(name="product_id", referencedColumnName="product_id"),
* @ORM'JoinColumn(name="shop_id", referencedColumnName="shop_id")
* })
*/
private $occurence;
您应该为 $occurence
属性指定 ManyToMany 关系,而不是 ManyToOne 关系。