【发布时间】:2014-11-23 19:32:50
【问题描述】:
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;
当我运行学说 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 时,会出现一个新错误:
[教义\ORM\ORMException]
列名FdGrp_CD引用的关系来自 Acme\Entities\FoodDes 对 Acme\Entities\FoodGroup 不存在。
这个错误没有任何意义。当然不会存在。我正在对一个空数据库运行它!
从命令行运行时会发生这些错误,但在针对数据库查询实体时也会发生这些错误。有人能帮帮我吗?
【问题讨论】:
-
我从未见过这样的声明:
@ORM\Id();。也许@ORM\Id,不带括号? -
谢谢,但这是一回事。我都试过了
标签: php mysql entity-framework doctrine many-to-one