Doctrine类表继承对属性的访问

时间:2015-01-08 16:30:31

标签: symfony doctrine-orm

我需要通过'type'列值将ACTIVITY表连接到特定的表(例如:teamEvent,projectEvent等)。

我的选择:

 $activity = $this
      ->getDoctrine()
      ->getRepository('TaskerWebBundle:Activity')
      ->findAll();

在$ activity数组中,我有一个具有属性的对象:ID(null)STATUS(字符串),TEAM(obj),USER_TRIGGER(obj)但缺少TYPE(字符串)和USER(obj) - 来自Activity实体。我如何访问这个属性?

如果我使用$activity->getType(),则返回NULL。

活动实体:

namespace Tasker\WebBundle\Entity;

use Gedmo\Mapping\Annotation as Gedmo;
use Doctrine\ORM\Mapping as ORM;

/**
 * Activity
 *
 * @ORM\Table()
 * @ORM\Entity(repositoryClass="Tasker\WebBundle\Entity\ActivityRepository")
 *
 * @ORM\InheritanceType("JOINED")
 * @ORM\DiscriminatorColumn(name="type", type="string")
 * @ORM\DiscriminatorMap({"team" = "TeamEvents"})
 */

class Activity
{
    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @ORM\ManyToOne(targetEntity="User", inversedBy="activities")
     * @ORM\JoinColumn(name="user_id", referencedColumnName="id")
     */
    private $user;

    /**
     * @var \DateTime $created
     *
     * @Gedmo\Timestampable(on="create")
     * @ORM\Column(type="datetime")
     */
    private $created;

    /**
     * @var \DateTime $updated
     *
     * @Gedmo\Timestampable(on="update")
     * @ORM\Column(type="datetime")
     */
    private $updated;

    /**
     * Get id
     *
     * @return integer 
     */
    public function getId()
    {
        return $this->id;
    }

    /**
     * Set type
     *
     * @param string $type
     * @return Activity
     */
    public function setType($type)
    {
        $this->type = $type;

        return $this;
    }

    /**
     * Get type
     *
     * @return string 
     */
    public function getType()
    {
        return $this->type;
    }

    /**
     * Set user
     *
     * @param User $user
     * @return Activity
     */
    public function setUser(User $user)
    {
        $this->user = $user;

        return $this;
    }

    /**
     * Get user
     *
     * @return integer 
     */
    public function getUser()
    {
        return $this->user;
    }

    public function getCreated()
    {
        return $this->created;
    }

    public function getUpdated()
    {
        return $this->updated;
    }

}

TeamEvents实体:

namespace Tasker\WebBundle\Entity;

use Doctrine\ORM\Mapping as ORM;
use Tasker\WebBundle\Entity\Activity;

/**
 * TeamEvents
 *
 * @ORM\Table()
 * @ORM\Entity(repositoryClass="Tasker\WebBundle\Entity\TeamEventsRepository")
 */
class TeamEvents extends Activity
{
    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @ORM\ManyToOne(targetEntity="Team", inversedBy="events")
     * @ORM\JoinColumn(name="team_id", referencedColumnName="id")
     */
    private $team;

    /**
     * @var string
     *
     * @ORM\Column(name="status", type="string", length=255)
     */
    private $status;

    /**
     * @ORM\ManyToOne(targetEntity="User", inversedBy="teamEvents")
     * @ORM\JoinColumn(name="user_trigger_id", referencedColumnName="id")
     */
    private $userTrigger;

    /**
     * Get id
     *
     * @return integer 
     */
    public function getId()
    {
        return $this->id;
    }

    /**
     * Set team
     *
     * @param integer $team
     * @return TeamEvents
     */
    public function setTeam($team)
    {
        $this->team = $team;

        return $this;
    }

    /**
     * Get team
     *
     * @return integer 
     */
    public function getTeam()
    {
        return $this->team;
    }

    /**
     * Set status
     *
     * @param string $status
     * @return TeamEvents
     */
    public function setStatus($status)
    {
        $this->status = $status;

        return $this;
    }

    /**
     * Get status
     *
     * @return string 
     */
    public function getStatus()
    {
        return $this->status;
    }

    /**
     * Set userTrigger
     *
     * @param integer $userTrigger
     * @return TeamEvents
     */
    public function setUserTrigger($userTrigger)
    {
        $this->userTrigger = $userTrigger;

        return $this;
    }

    /**
     * Get userTrigger
     *
     * @return integer 
     */
    public function getUserTrigger()
    {
        return $this->userTrigger;
    }
}

1 个答案:

答案 0 :(得分:-1)

由于没有类型属性,您无法访问类型属性。那"键入"你所指的只是你的表中的一个字段,由Doctrine使用。你可以做的是实现一种方法,例如每个类中的getType()并返回相应的字符串。

class TeamEvents extends Activity{

   public function getType(){
      return 'team';
   }

}

等等。