gpt4 book ai didi

php - Doctrine 2 - 使用类表继承时的访问级别问题

转载 作者:可可西里 更新时间:2023-11-01 12:57:06 25 4
gpt4 key购买 nike

我正在尝试实现 Class Table Inheritance我的 Symfony 2 项目中提供了 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 的访问级别的错误 < strong>Food(例如Pizza),说明它必须受到保护或变弱。我没有在 Pizza 的任何地方声明 $id,因为我认为它会继承自 Food

所以我尝试声明$id,但这给了我一个错误,因为我不能重新声明$id。我认为我需要某种对 Food 中的 $id 的引用,在 Pizza 中,但是 Doctrine 2 文档并没有真正给我一个明确的信息回答这会是什么样子。

希望你明白我的意思并能帮助我。

最佳答案

显然我应该多研究一下 doctrine:generate:entities 生成的代码。当我今天早上启动我的 IDE 并再次看到代码时,我注意到它已经“复制”了所有继承的字段(比如 Food 中的 $id/strong>,在上面的例子中)给 children (Pizza,在上面的例子中)。

出于某种原因,它决定将这些字段设为私有(private)。我在所有类中手动将访问级别更改为 protected 并尝试再次运行 doctrine:schema:update --force:它成功了!

所以,在许多情况下,解决办法就是好好休息一晚! ;)

如果有人针对此问题提出更好的解决方案和/或解释,请张贴。我非常乐意更改已接受的答案。

关于php - Doctrine 2 - 使用类表继承时的访问级别问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7558625/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com