Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Symfony 2-扩展生成的实体类_Php_Symfony_Doctrine Orm - Fatal编程技术网

Php Symfony 2-扩展生成的实体类

Php Symfony 2-扩展生成的实体类,php,symfony,doctrine-orm,Php,Symfony,Doctrine Orm,我有一些由教义生成的实体。其中一个是时隙,下面是表定义 TABLE: Timeslot id integer primary key start integer end integer 我想通过使用一些辅助方法来扩展时隙实体类,如 public class TimeslotHelper extends Timeslot { public function getStartDay(){ return $this->$start_time /

我有一些由教义生成的实体。其中一个是时隙,下面是表定义

TABLE: Timeslot
    id integer primary key
    start integer
    end integer
我想通过使用一些辅助方法来扩展时隙实体类,如

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;
    }
    ...
}
我使用

但是我不想修改条令自动生成的类文件,我想像这样使用它:

$timeslots = $this->getDoctrine()->getRepository('AppBundle:TimeslotHelper')->find...
通过仅扩展Timeslot类,我有此错误(因为实体未正确映射):

有什么提示吗

解决方案 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;
    }

}

你应该做相反的事

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()

为什么要延长呢?只需使用一个独立的
TimeslotHelper
类,并将
Timeslot
对象作为方法参数传递。这只是一个安慰,因为我需要始终使用TimeslotHelper,所以我想进行如下调用:
$this->getdoctor()->getRepository('AppBundle:TimeslotHelper')->…
如果您总是想使用它,那么就修改生成的类-这就是它的用途。如果您只是为了在视图层中显示值而进行计算,那么细枝扩展可能会更好-请看,只需将其放在主实体中,这就是它的用途。这就是我一直在搜索的内容。非常感谢;)
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()