Php 使用注释映射的多通关系在Symfony中不起作用

Php 使用注释映射的多通关系在Symfony中不起作用,php,symfony,Php,Symfony,我正在尝试使用注释映射在symfony中创建一对多关系。一切似乎都很好,但约束不起作用。我可以在产品表中插入数据,而无需在供应商表中插入数据,因为供应商是超级实体。 这是我的尝试: Product.php /** * @ORM\ManyToOne(targetEntity="Supplier", inversedBy="products") * @ORM\JoinColumn(name="$supplierId", referencedColumnName="$id")

我正在尝试使用注释映射在symfony中创建一对多关系。一切似乎都很好,但约束不起作用。我可以在产品表中插入数据,而无需在供应商表中插入数据,因为供应商是超级实体。 这是我的尝试:

Product.php

/**
     * @ORM\ManyToOne(targetEntity="Supplier", inversedBy="products")
     * @ORM\JoinColumn(name="$supplierId", referencedColumnName="$id")
     */
    private $supplier;
    /**
     * @var integer
     *
     * @ORM\Column(name="supplier_id", type="integer")
     */
    private $supplierId;
/**
     * @ORM\OneToMany(targetEntity="Product", mappedBy="$supplier")
     */
    private $products;

    public function __construct()
    {
        $this->products = new ArrayCollection();
    }
/**
 * @ORM\ManyToOne(targetEntity="Supplier", inversedBy="products")
 */
private $supplier;
/**
 * @var integer
 *
 * @ORM\Column(name="supplier_id", type="integer")
 */
private $supplierId;
/**
 * @ORM\OneToMany(targetEntity="Product", mappedBy="supplier")
 */
private $products;
supplier.php

/**
     * @ORM\ManyToOne(targetEntity="Supplier", inversedBy="products")
     * @ORM\JoinColumn(name="$supplierId", referencedColumnName="$id")
     */
    private $supplier;
    /**
     * @var integer
     *
     * @ORM\Column(name="supplier_id", type="integer")
     */
    private $supplierId;
/**
     * @ORM\OneToMany(targetEntity="Product", mappedBy="$supplier")
     */
    private $products;

    public function __construct()
    {
        $this->products = new ArrayCollection();
    }
/**
 * @ORM\ManyToOne(targetEntity="Supplier", inversedBy="products")
 */
private $supplier;
/**
 * @var integer
 *
 * @ORM\Column(name="supplier_id", type="integer")
 */
private $supplierId;
/**
 * @ORM\OneToMany(targetEntity="Product", mappedBy="supplier")
 */
private $products;
添加上面的命令后,我运行了这个命令

php bin/console doctrine:schema:update --force

但是关系从未创建过,请问有什么问题吗?

这是因为您在name和mappedBy中使用了php变量remove
$
sign from

@ORM\JoinColumn(name="$supplierId", referencedColumnName="$id")

应该是

Product.php

/**
     * @ORM\ManyToOne(targetEntity="Supplier", inversedBy="products")
     * @ORM\JoinColumn(name="$supplierId", referencedColumnName="$id")
     */
    private $supplier;
    /**
     * @var integer
     *
     * @ORM\Column(name="supplier_id", type="integer")
     */
    private $supplierId;
/**
     * @ORM\OneToMany(targetEntity="Product", mappedBy="$supplier")
     */
    private $products;

    public function __construct()
    {
        $this->products = new ArrayCollection();
    }
/**
 * @ORM\ManyToOne(targetEntity="Supplier", inversedBy="products")
 */
private $supplier;
/**
 * @var integer
 *
 * @ORM\Column(name="supplier_id", type="integer")
 */
private $supplierId;
/**
 * @ORM\OneToMany(targetEntity="Product", mappedBy="supplier")
 */
private $products;
Supplier.php

/**
     * @ORM\ManyToOne(targetEntity="Supplier", inversedBy="products")
     * @ORM\JoinColumn(name="$supplierId", referencedColumnName="$id")
     */
    private $supplier;
    /**
     * @var integer
     *
     * @ORM\Column(name="supplier_id", type="integer")
     */
    private $supplierId;
/**
     * @ORM\OneToMany(targetEntity="Product", mappedBy="$supplier")
     */
    private $products;

    public function __construct()
    {
        $this->products = new ArrayCollection();
    }
/**
 * @ORM\ManyToOne(targetEntity="Supplier", inversedBy="products")
 */
private $supplier;
/**
 * @var integer
 *
 * @ORM\Column(name="supplier_id", type="integer")
 */
private $supplierId;
/**
 * @ORM\OneToMany(targetEntity="Product", mappedBy="supplier")
 */
private $products;
更多信息,你会发现


另外,如果您希望避免问题,请将数组集合分配给products变量。

在上面的答案中进行修改后,当我运行此命令时,php bin/console-doctor:schema:update--force coonsole不会告诉我任何要更新的内容。所有内容都已同步可能是因为您的模式中已经有了这些表?它将仅在架构更改时运行更新。