【发布时间】:2011-09-26 17:09:25
【问题描述】:
我正在尝试在我的 Symfony 2 项目中实现 Class Table Inheritance Doctrine 2 提供的功能。 假设有一个 Pizza 类、Burito 类和一个 MacAndCheese 类,它们都继承自 Food 类。
Food 类具有以下设置:
<?php
namespace Kitchen;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity
* @ORM\Table(name="food")
* @ORM\InheritanceType("JOINED")
* @ORM\DiscriminatorColumn(name="dish", type="string")
* @ORM\DiscriminatorMap({"pizza" = "Pizza", "burito" = "Burito", "mac" => "MacAndCheese"})
*/
class Food {
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
并且继承的类有这些设置(例如Pizza):
<?php
namespace Kitchen;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity
* @ORM\Table(name="food_pizza")
*/
class Pizza extends Food {
当从 Symfony 2 应用程序/控制台运行 doctrine:schema:update --force 时,我收到一个关于 $id 子级访问级别的错误 Food(例如Pizza),说明它必须受到保护或更弱。我没有在 Pizza 的任何地方声明 $id,因为我认为它会继承自 Food。
所以我尝试声明 $id,但这给了我一个错误,因为我无法重新声明 $id。 我想我需要从 Food in Pizza 中对 $id 进行某种引用,但 Doctrine 2 文档并没有真正给我一个明确的说明回答这会是什么样子。
希望你明白我的意思并能帮助我。
【问题讨论】:
标签: php symfony doctrine doctrine-orm