Symfony 2 – расширенный класс Entity

У меня есть некоторые сущности, созданные Doctrine. Одним из них является Timeslot , вот определение таблицы

TABLE: Timeslot id integer primary key start integer end integer 

Я хочу расширить класс сущностей Timeslot , используя некоторые вспомогательные методы, такие как

 public class TimeslotHelper extends Timeslot { public function getStartDay(){ return $this->$start_time / (24*60); } public function getStartHour(){ return $this->$end_time % (24*60); } public function getStartMinutes(){ return $this->$start_time % 60; } ... } 

Я получаю все экземпляры Timeslot , используя

 $timeslots = $this->getDoctrine()->getRepository('AppBundle:Timeslot')->find... 

Но я не хочу модифицировать файл сгенерированного авторами сгенерированного доктрины, и я хотел бы использовать его как:

 $timeslots = $this->getDoctrine()->getRepository('AppBundle:TimeslotHelper')->find... 

Только расширяя класс Timeslot, у меня есть эта ошибка (поскольку объект неправильно отображен):

 No mapping file found named '/home/otacon/PhpstormProjects/Web/src/AppBundle/Resources/config/doctrine/TimeslotHelper.orm.xml' for class 'AppBundle\Entity\TimeslotHelper'. 

Любые намеки?

РЕШЕНИЕ

Суперкласса TimeslotHelper

 abstract class TimeslotHelper { abstract protected function getStart(); abstract protected function getEnd(); public function getStartDay(){ return floor($this->getStart() / (24*60)); } public function getEndDay(){ return floor($this->getEnd() / (24*60)); } public function getStartHour(){ return floor(($this->getStart() % (24*60)) / 60); } public function getEndHour(){ return floor(($this->getEnd() % (24*60)) / 60); } public function getStartMinute(){ return $this->getStart() % 60; } public function getEndMinute(){ return $this->getEnd() % 60; } } 

Подкласс подкласса

 /** * Timeslot * * @ORM\Entity */ class Timeslot extends TimeslotHelper { /** * @var integer * * @ORM\Column(name="start", type="integer", nullable=true) */ private $start; /** * @var integer * * @ORM\Column(name="end", type="integer", nullable=true) */ private $end; /** * @var integer * * @ORM\Column(name="id", type="integer") * @ORM\Id * @ORM\GeneratedValue(strategy="IDENTITY") */ private $id; /** * Set start * * @param integer $start * @return Timeslot */ public function setStart($start) { $this->start = $start; return $this; } /** * Get start * * @return integer */ public function getStart() { return $this->start; } /** * Set end * * @param integer $end * @return Timeslot */ public function setEnd($end) { $this->end = $end; return $this; } /** * Get end * * @return integer */ public function getEnd() { return $this->end; } /** * Get id * * @return integer */ public function getId() { return $this->id; } } 

Related of "Symfony 2 – расширенный класс Entity"

вы должны сделать обратное

 public class Timeslot extends TimeslotHelper { //the doctrine auto-generated class file } 

Класс вашего помощника:

 public class TimeslotHelper { public function getStartDay(){ return $this->$start_time / (24*60); } public function getStartHour(){ return $this->$end_time % (24*60); } public function getStartMinutes(){ return $this->$start_time % 60; } ... } 

Ваше лицо

 $timeslots = $this->getDoctrine()->getRepository('AppBundle:Timeslot')->find... $timeslots-> getStartDay()