Я ищу решение для следующей проблемы с наследованием базы данных, используя Doctrine 2, встроенную в структуру Symfony 2. Это то, что я хочу сделать ...Symfony 2 + Doctrine 2 + inheritance
Я хочу создать две таблицы (UredniHodiny, KonzultacniHodiny) с тем же интерфейсом, как абстрактный класс Hodiny. Это, как я пытаюсь сделать это
<?php
// src/CvutPWT/ImportBundle/Entity/Hodiny.php
namespace CvutPWT\ImportBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\MappedSuperclass
*/
abstract class Hodiny
{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @ORM\ManyToOne(targetEntity="Osoba")
*/
protected $osoba;
/**
* @ORM\ManyToOne(targetEntity="Mistnost")
*/
protected $mistnost;
/**
* @ORM\Column(type="datetime")
*/
protected $zacatek;
/**
* @ORM\Column(type="datetime")
*/
protected $konec;
}
<?php
// src/CvutPWT/ImportBundle/Entity/KonzultacniHodiny.php
namespace CvutPWT\ImportBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity
* @ORM\Table(name="konzultacnihodiny")
*/
class KonzultacniHodiny extends Hodiny
{
}
<?php
// src/CvutPWT/ImportBundle/Entity/UredniHodiny.php
namespace CvutPWT\ImportBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity
* @ORM\Table(name="urednihodiny")
*/
class UredniHodiny extends Hodiny
{
}
Теперь, когда я бегу php app/console doctrine:generate:entities CvutPWTImportBundle
Symfony создает все переменные (точнее столбцов) из класса Hodiny как частные переменные для обоих дочерних классов. Теперь, когда я пытаюсь создать эти таблицы с app/console doctrine:schema:update --force
, я получаю ошибки, которые $id must be protected or weaker
. Когда я меняю эту защиту вручную, я могу создавать таблицы, но есть только один столбец (id). Но это не то, на что я надеялся. Может кто-нибудь дать мне какой-нибудь совет, что я делаю неправильно?
Эй, это работает, как и ожидалось для меня. Я получаю таблицу под названием «консултакниходины» и таблицу под названием «urednihodiny», которые содержат 5 полей. Примечание. Мне также необходимо добавить два других объекта, поскольку они в настоящее время являются FK в базовом классе Hodiny. Вы также должны подтвердить, что [тип наследования] (http://docs.doctrine-project.org/projects/doctrine-orm/en/2.0.x/reference/inheritance-mapping.html), который вы хотите использовать так как их больше одного. – Shane