Doctrine 2 で BASIC 継承を達成しようとしていますが、いくつかの大きな問題に直面しています。そのようなタスクはそれほど複雑であってはなりません。ビジネスに取り掛かりましょう...
BaseFoodType、Drink、Snack の 3 つのクラスがあります。私の BaseFoodType には、次のクラス定義があります。
/** @ORM\MappedSuperclass */
class BaseFoodType {
/**
* @ORM\Column(type="integer", length=7)
*/
public $budget = 0;
}
doctrine Web サイトの継承の手順に従います: http://docs.doctrine-project.org/en/2.0.x/reference/inheritance-mapping.html
エンティティを生成する前のサブクラスは次のようになります。
namespace MySite\MainBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* MySite\MainBundle\Entity\EventDrink
*
* @ORM\Table(name="drink")
* @ORM\Entity
*/
class Drink extends BaseFoodType {
/**
* @ORM\Column(type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @ORM\Column(type="integer", length=5, nullable=true)
*/
public $people_count;
}
Drink と Snack の両方がこの基本クラスを継承していますが、doctrine:generate:entities コマンドを使用してエンティティを構築しようとすると、多くの問題が発生します。まず、Symfony はプライベートな「バジェット」プロパティをゲッターとセッターと共に各サブクラスに挿入します (これは目的の継承を無効にします)。
/**
* @var integer
*/
private $budget;
/**
* Set budget
*
* @param integer $budget
*/
public function setBudget($budget)
{
$this->budget = $budget;
return $this;
}
/**
* Get budget
*
* @return integer
*/
public function getBudget()
{
return $this->budget;
}
次に、致命的なエラーが発生します。
致命的なエラー: MySite\MainBundle\Entity\Drink::$budget へのアクセス レベルは、C:\xampp\htdocs\MySite\src\MySite\MainBundle\Entity\ で (クラス MySite\MainBundle\Entity\BaseFoodType のように) パブリックにする必要があります197行目のDrink.php
おそらく、生成されたプロパティを公開して、先に進むこともできますが、これも継承の目的に反します!
洞察をお寄せいただきありがとうございます。