__toString从另一个实体返回名称

时间:2014-06-03 01:02:24

标签: symfony

假设我的数据库中有2个表:课程和组。小组每年可以上1节课。

然后我将有2个实体,课程实体:

<?php
namespace Sifo\AdminBundle\Entity;
use Doctrine\ORM\Mapping as ORM;

class Lesson
{
    /**
    * @var integer
    */
    private $id;


    /**
    * @var string
    */
    private $name;

    /**
    * Set id
    *
    * @param integer $id
    * @return DftGrupMapel
    */
    public function setId($id)
    {
        $this->id = $id;
        return $this;
    }

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

和组实体:

<?php
namespace Sifo\AdminBundle\Entity;
use Doctrine\ORM\Mapping as ORM;

class Group
{
    /**
    * @var integer
    */     
    private $id;

    /**
     * @var \Sifo\AdminBundle\Entity\MstLesson
     */
    private $idLesson;

    /**
    * @var integer
    */
    private $year;

    /**
    * Set id
    *
    * @param integer $id
    * @return DftGrup
    */
    public function setId($id)
    {
        $this->id = $id;
        return $this;
    }

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

    /**
     * Set idLesson
     *
     * @param \Sifo\AdminBundle\Entity\MstLesson $idLesson
     * @return DftGrup
     */
    public function setIdLesson(\Sifo\AdminBundle\Entity\MstLesson $idLesson = null)
    {
        $this->idLesson = $idLesson;
        return $this;
    }

    /**
     * Get idGrup
     *
     * @return \Sifo\AdminBundle\Entity\MstGrup 
     */
    public function getIdLesson()
    {
        return $this->idLesson;
    }

    /**
    * Set year
    *
    * @param integer $year
    * @return DftGrup
    */
    public function setYear($year)
    {
        $this->year = $year;
        return $this;
    }

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

问题是,在群组实体中,我没有为__toString()显示可用的字符串。我在实体中创建新的name字段并且在那里保存课程 name时效果不佳。

lesson.idgroup.idLesson是外键。

如何在课程实体中显示name字段,以便在__toString() 中显示,而无需创建新字段?

2 个答案:

答案 0 :(得分:1)

这是一个ORM。您的Group课程并不真正关心它与Lesson id 相关的内容......它应该只有一个参考到Lesson对象本身:

<?php
namespace Sifo\AdminBundle\Entity;
use Doctrine\ORM\Mapping as ORM;

class Group
{
    private $id;      // An integer
    private $lesson;  // A Lesson object
    private $year;    // An integer, probably

$lessonLesson对象后,您可以在Group::__toString()中引用它:

private function __toString() {
    return $this->lesson->getName();
}

这里有关于关联映射的文档,这有助于映射GroupLesson之间的关系:

http://docs.doctrine-project.org/en/2.0.x/reference/association-mapping.html

答案 1 :(得分:0)

 public function setIdLesson(\Sifo\AdminBundle\Entity\MstLesson $idLesson = null)
  {
    $this->idLesson = $idLesson;
    return $this;
  }

在这里,您不需要return语句。