Я ищу решение следующей проблемы с наследованием базы данных с использованием Doctrine 2, встроенной в фреймворк Symfony 2. Вот что я хочу сделать...
Я хочу создать две таблицы (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 ). Но это не то, на что я надеялся. Может кто-нибудь дать мне совет, что я делаю неправильно?