doctrine:架构:创建 - 复合关系不存在关系引用的列名


doctrine:schema:create - Column name referenced for relation does not exist for composite relationship

基本思想:我有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 关系。