Arn*_*nen 7 php doctrine symfony doctrine-orm
我正在尝试在我的Symfony 2项目中实现Class Table Inheritance Doctrine 2.假设有一个Pizza类,Burito类和一个MacAndCheese类,它们都继承自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;
Run Code Online (Sandbox Code Playgroud)
并且继承的类具有这些设置(例如Pizza):
<?php
namespace Kitchen;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity
* @ORM\Table(name="food_pizza")
*/
class Pizza extends Food {
Run Code Online (Sandbox Code Playgroud)
当从Symfony 2应用程序/控制台运行doctrine:schema:update --force时,我收到一个关于Food(比萨饼)子女的$ id访问级别的错误,声明它必须受到保护或更弱.我没有在比萨饼的任何地方宣布$ id,因为我估计它将继承自Food.
所以我试图声明$ id,但这给了我一个错误,因为我无法重新声明$ id.我想我需要一些参考从$ ID 食品的比萨,但原则2文档没有真正给我什么,这将看起来像一个明确的答案.
希望你明白我的意思,可以帮助我.
显然我应该多研究一下由doctrine:generate:entities生成的代码。当我今天早上启动 IDE 并再次看到代码时,我注意到它已将所有继承字段(如上例中Food中的$id)“复制”到子级(上例中Pizza )。
由于某种原因,它决定将这些字段设为私有。我手动将所有类中的访问级别更改为protected,并尝试再次运行doctrine:schema:update --force:它有效!
因此,正如在许多情况下一样,解决方案就是好好休息一晚!;)
如果有人对此问题提出更好的解决方案和/或解释,请发布。我非常乐意更改已接受的答案。
归档时间: |
|
查看次数: |
2944 次 |
最近记录: |