在select上填充非持久字段

时间:2016-12-14 14:31:11

标签: php doctrine-orm doctrine symfony

我使用Sytrfony的Doctrine,我有以下简单的实体:

/**
* @ORM\Table()
*/
class Ads{

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

    /**
    * @var Photo
    *
    * @ORM\OneToMany(targetEntity="AppBundle\Entity\Photo", mappedBy="advertisement", cascade={"persist", "remove"})
    *
    */
    private $photos;

    /**
    * @var string
    */
    private $defaultPhoto = null;

    public function __construct()
    {
        $this->photos = new ArrayCollection();
    }

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

    /**
     * @return ArrayCollection
     */
    public function getPhotos()
    {
        return $this->photos;
    }

    /**
     * @param ArrayCollection $photos
     * @return $this
     */
    public function setPhotos($photos)
    {
        $this->photos = $photos;

        return $this;
    }

    public function getDefaultPhoto()
    {
        if(count($this->getPhotos()) > 0){
            return $this->getPhotos()[0];
        }

        return null;
    }
}

因此,实体是一个简单的实体,并且还具有非持久性字段$defaultPhotos

我的问题是,当我在Symfony中使用doctrine查询findfindAll时,如何自动触发getDefaultPhoto方法并填充$defaultPhoto属性?现在,当我在整个集合中查询defaultPhotonull时,每次findfindAll

是否有事件可以执行此操作或任何其他解决方案?

1 个答案:

答案 0 :(得分:0)

首先,您不会使用getter($defaultPhoto)填充任何内容(getDefaultPhoto)。 您可以在类的构造函数上填充defaultPhoto属性,然后在$this->defaultPhoto方法上返回null而不是getDefaultPhoto()