Doctrine在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;
当我运行doctrine orm:schema-tool:create时,它失败并出现错误:
没有为实体指定标识符/主键 'Acme的\实体\ 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;
当我运行doctrine orm:schema-tool:再次创建时,会产生一个新错误:
[学说\ ORM \ ORMException]
从中引用的列名FdGrp_CD
Acme \ Entities \ FoodDes朝向Acme \ Entities \ FoodGroup不存在。
这个错误没有任何意义。当然它不会存在。我在一个空的数据库上运行它!
从命令行运行会发生这些错误,但在针对数据库查询实体时也会发生这些错误。有人能帮帮我吗?
答案 0 :(得分:1)
我宁愿从我的一个项目中为您提供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;
}
由于您的代码不起作用的原因可能很多(名称空间,文件夹结构,列名称等)。这个例子可以运行和测试。试一试:)