教义失败时,FoodDes(许多)和FoodGroup(一个)之间建立了简单的双向多对一关系。这两个实体都显示在这里:

/**
 * @ORM\Entity
 * @ORM\Table(name="FOOD_DES")
 */
class FoodDes
{
    public function __construct()
    {
        $this->foodGroup = new ArrayCollection();
    }

    /**
     * @ORM\Id
     * @ORM\Column(name="NDB_No", type="string", length=10)
     */
    protected $id;

    /**
     * @ORM\ManyToOne(targetEntity="FoodGroup", inversedBy="fdGroupCode")
     * @ORM\JoinColumn(name="FdGrp_Cd", referencedColumnName="FdGrp_CD")
     */
    protected $foodGroup;
}


>

/**
 * @ORM\Entity
 * @ORM\Table(name="FD_GROUP")
 */
class FoodGroup
{

    /**
     * @ORM\Id();
     * @ORM\GeneratedValue(strategy="NONE");
     * @ORM\OneToMany(targetEntity="FoodDes", mappedBy="foodGroup")
     */
    protected $fdGroupCode;


当我运行教义orm:schema-tool:create时,它失败并显示错误:


  没有为实体指定标识符/主键
  “ Acme \ Entities \ FoodGroup”。每个实体必须有一个
  标识符/主键。


但是,我将$ fdGroupCode标记为唯一标识符。



下一个方法

我还尝试了在FoodGroup实体上创建新的主键$ id并从FoodGroup的$ fdGroupCode删除主键标签。以下是新的FoodGroup实体。

/**
 * @ORM\Entity
 * @ORM\Table(name="FD_GROUP")
 */
class FoodGroup
{
    /**
     * @ORM\Id
     * @ORM\Column(name="id", type="integer", nullable=false)
     */
    protected $id;

    /**
     * @ORM\OneToMany(targetEntity="FoodDes", mappedBy="foodGroup")
     */
    protected $fdGroupCode;


当我再次运行主义orm:schema-tool:create时,它会产生一个新错误:


  [Doctrine \ ORM \ ORMException]
  从中引用关联的列名FdGrp_CD
  朝向Acme \ Entities \ FoodGroup的Acme \ Entities \ FoodDes不存在。


此错误没有任何意义。当然不会存在。我正在针对空数据库运行它!

这些错误是从命令行运行时发生的,但是在针对数据库查询实体时也会发生。有人能帮帮我吗?

最佳答案

我希望从我的一个项目中为您提供OneToMany的工作示例,以便您可以正确地查看差异和格式化代码。如果不起作用,请尝试获取新的Symfony dist并重新开始。

<?php
// SomeBundle/Entity/Shop/Product.php
namespace SomeBundle\Entity\Shop;

use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity
 * @ORM\Table(name="shop_products")
 */
class Product
{
    /**
     * @ORM\Id
     * @ORM\GeneratedValue
     * @ORM\Column(type="bigint")
     */
    protected $id;

    /**
     * @ORM\OneToMany(targetEntity="ProductItem", mappedBy="product")
     */
    protected $productItem;
}


相关实体:

<?php
// SomeBundle/Entity/Shop/ProductItem.php
namespace SomeBundle\Entity\Shop;

use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity
 * @ORM\Table(name="shop_products_items")
 */
class ProductItem
{
    /**
     * @ORM\Id
     * @ORM\GeneratedValue
     * @ORM\Column(type="bigint")
     */
    protected $id;

    /**
     * @ORM\ManyToOne(targetEntity="Product", inversedBy="productItem")
     * @ORM\JoinColumn(name="product_id", referencedColumnName="id")
     */
    protected $product;
}


由于某些原因,您的代码无法正常工作(命名空间,文件夹结构,列名等)。此示例有效且经过测试。试试看 : )

10-06 06:18