Php 原则2-使用类表继承时的访问级别问题
我正在尝试在我的Symfony 2项目中实现Doctrine 2提供的功能。 比如说,有一个比萨饼类、一个布里托类和一个麦当劳奶酪类,它们都是从食品类继承而来的 食品类具有以下设置:Php 原则2-使用类表继承时的访问级别问题,php,symfony,doctrine,doctrine-orm,Php,Symfony,Doctrine,Doctrine Orm,我正在尝试在我的Symfony 2项目中实现Doctrine 2提供的功能。 比如说,有一个比萨饼类、一个布里托类和一个麦当劳奶酪类,它们都是从食品类继承而来的 食品类具有以下设置: <?php namespace Kitchen; use Doctrine\ORM\Mapping as ORM; /** * @ORM\Entity * @ORM\Table(name="food") * @ORM\InheritanceType("JOINED") * @ORM\Discr
<?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;
需要记住的事情:
每个实体必须有一个标识符/主键。您无法生成
继承层次结构中的实体当前(beta)作为解决方案
在为新实体生成方法时,我离开了项目
继承实体并在生成后将其移回
显然,我应该更深入地研究一下doctrine:generate:entities生成的代码。今天早上,当我启动IDE并再次查看代码时,我注意到它已将所有继承字段(如上例中食物中的$id)“复制”给了孩子们(上例中的比萨饼)
出于某种原因,它决定将这些领域私有化。我手动将所有类中的访问级别更改为protected,并尝试运行条令:schema:update--force:再次生效
因此,正如在许多情况下一样,解决办法是好好休息一晚!;)
如果有人对这个问题提出了更好的解决方案和/或解释,请发布。我非常乐意更改已接受的答案。也许您应该用以下方式定义@ORM\DiscriminatorMap:
/**
*
..
* @ORM\DiscriminatorMap({"food" = "Food", "pizza" = "Pizza", "burito" = "Burito", "mac" => "MacAndCheese"})
*/
如果您将代码与Doctrine站点的示例进行比较,您将看到他们将父实体添加到DiscriminatorMap。谢谢,但据我所知,这实际上是关于生成实体的,我只想生成我的数据库(也许这些方法在Doctrine 2中内部相关,我不知道).你是说你的IDE改变了你字段的访问级别吗?那有点可怕。你使用了什么IDE,这样我就可以密切注意这种情况了?@cantera25这不是IDE,是Symfony 2条令:generate:entities命令完成的。谢谢。这节省了我很多时间。@ArnoMoonen我想没关系,因为食品部的孩子们只能使用父母的受保护的或公共的财产。这就是为什么您需要定义受保护的
,而不是私有的
。
/**
*
..
* @ORM\DiscriminatorMap({"food" = "Food", "pizza" = "Pizza", "burito" = "Burito", "mac" => "MacAndCheese"})
*/