如何在Symfony中显示一对多关系

时间:2014-05-13 14:05:32

标签: php html symfony web doctrine-orm

您好我正在使用Symfony编写一个小型Web应用程序。

我在两个实体之间有一对多关系。

实体一:

/**
 * @ORM\Entity
 * @ORM\Table(name="Helfer")
 */
class Helfer {

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

    /**
     * @ORM\Column(type="string")
     * @Assert\NotBlank()
     */
    protected $name;

    /**
     * @ORM\Column(type="string")
     * @Assert\NotBlank()
     */
    protected $lastName;

    /**
     * @ORM\Column(type="string")
     */
    protected $tel;

    /**
     * @ORM\Column(type="string")
     * @Assert\NotBlank()
     * @Assert\Email()
     */
    protected $email;

    /**
     * @ORM\Column(type="string")
     */
    protected $organisation;

    /**
     * @ORM\Column(type="integer")
     * @Assert\NotBlank()
     * @Assert\Range(min=6, minMessage="Du musst mindestens 6 Jahre Alt sein um bei uns helfen zu können.")
     */
    protected $age;

    /**
     * @ORM\OneToMany(targetEntity="Aufgaben", mappedBy="helfer", cascade={"persist","remove"})
     */
    protected $aufgaben;

    /**
     * @ORM\OneToMany(targetEntity="Zeiten", mappedBy="helfer", cascade={"persist","remove"})
     */
    protected $zeiten;

    /**
     * Constructor
     */
    public function __construct()
    {
        $this->aufgaben = new \Doctrine\Common\Collections\ArrayCollection();
        $this->zeiten = new \Doctrine\Common\Collections\ArrayCollection();
    }

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

    /**
     * Set name
     *
     * @param string $name
     * @return Helfer
     */
    public function setName($name)
    {
        $this->name = $name;

        return $this;
    }

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

    /**
     * Set lastName
     *
     * @param string $lastName
     * @return Helfer
     */
    public function setLastName($lastName)
    {
        $this->lastName = $lastName;

        return $this;
    }

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

    /**
     * Set tel
     *
     * @param string $tel
     * @return Helfer
     */
    public function setTel($tel)
    {
        $this->tel = $tel;

        return $this;
    }

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

    /**
     * Set email
     *
     * @param string $email
     * @return Helfer
     */
    public function setEmail($email)
    {
        $this->email = $email;

        return $this;
    }

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

    /**
     * Set organisation
     *
     * @param string $organisation
     * @return Helfer
     */
    public function setOrganisation($organisation)
    {
        $this->organisation = $organisation;

        return $this;
    }

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

    /**
     * Set age
     *
     * @param integer $age
     * @return Helfer
     */
    public function setAge($age)
    {
        $this->age = $age;

        return $this;
    }

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

    /**
     * Add aufgaben
     *
     * @param \DLRG\HelferBundle\Entity\Aufgaben $aufgaben
     * @return Helfer
     */
    public function addAufgaben(\DLRG\HelferBundle\Entity\Aufgaben $aufgaben)
    {
        $this->aufgaben[] = $aufgaben;

        return $this;
    }

    /**
     * Remove aufgaben
     *
     * @param \DLRG\HelferBundle\Entity\Aufgaben $aufgaben
     */
    public function removeAufgaben(\DLRG\HelferBundle\Entity\Aufgaben $aufgaben)
    {
        $this->aufgaben->removeElement($aufgaben);
    }

    /**
     * Get aufgaben
     *
     * @return \Doctrine\Common\Collections\Collection 
     */
    public function getAufgaben()
    {
        return $this->aufgaben;
    }

    /**
     * Add zeiten
     *
     * @param \DLRG\HelferBundle\Entity\Zeiten $zeiten
     * @return Helfer
     */
    public function addZeiten(\DLRG\HelferBundle\Entity\Zeiten $zeiten)
    {
        $this->zeiten[] = $zeiten;

        return $this;
    }

    /**
     * Remove zeiten
     *
     * @param \DLRG\HelferBundle\Entity\Zeiten $zeiten
     */
    public function removeZeiten(\DLRG\HelferBundle\Entity\Zeiten $zeiten)
    {
        $this->zeiten->removeElement($zeiten);
    }

    /**
     * Get zeiten
     *
     * @return \Doctrine\Common\Collections\Collection 
     */
    public function getZeiten()
    {
        return $this->zeiten;
    }
}

实体二:

 /**
 * @ORM\Entity
 * @ORM\Table(name="Aufgaben")
 */
class Aufgaben {

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

    /**
     * @ORM\Column(type="string")
     */
    protected $name;

    /**
     * @ORM\Column(type="string")
     */
    protected $beschreibung;

    /**
     * @ORM\ManyToOne(targetEntity="Helfer", inversedBy="aufgaben")
     * @ORM\JoinColumn(name="helfer_aufgaben_id", referencedColumnName="id")
     */
    protected $helfer;

    /**
     * @ORM\OneToMany(targetEntity="Zeiten", mappedBy="aufgaben", cascade={"persist","remove"})
     */
    protected $zeiten;

    /**
     * Constructor
     */
    public function __construct()
    {
        $this->zeiten = new \Doctrine\Common\Collections\ArrayCollection();
    }

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

    /**
     * Set name
     *
     * @param string $name
     * @return Aufgaben
     */
    public function setName($name)
    {
        $this->name = $name;

        return $this;
    }

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

    /**
     * Set beschreibung
     *
     * @param string $beschreibung
     * @return Aufgaben
     */
    public function setBeschreibung($beschreibung)
    {
        $this->beschreibung = $beschreibung;

        return $this;
    }

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

    /**
     * Set helfer
     *
     * @param \DLRG\HelferBundle\Entity\Helfer $helfer
     * @return Aufgaben
     */
    public function setHelfer(\DLRG\HelferBundle\Entity\Helfer $helfer = null)
    {
        $this->helfer = $helfer;

        return $this;
    }

    /**
     * Get helfer
     *
     * @return \DLRG\HelferBundle\Entity\Helfer 
     */
    public function getHelfer()
    {
        return $this->helfer;
    }

    /**
     * Add zeiten
     *
     * @param \DLRG\HelferBundle\Entity\Zeiten $zeiten
     * @return Aufgaben
     */
    public function addZeiten(\DLRG\HelferBundle\Entity\Zeiten $zeiten)
    {
        $this->zeiten[] = $zeiten;

        return $this;
    }

    /**
     * Remove zeiten
     *
     * @param \DLRG\HelferBundle\Entity\Zeiten $zeiten
     */
    public function removeZeiten(\DLRG\HelferBundle\Entity\Zeiten $zeiten)
    {
        $this->zeiten->removeElement($zeiten);
    }

    /**
     * Get zeiten
     *
     * @return \Doctrine\Common\Collections\Collection 
     */
    public function getZeiten()
    {
        return $this->zeiten;
    }
}

我的数据库在Aufgaben表中有条目。现在我的用户应该在Helfer.php中输入他们的名字和属性。用户应该从Aufgaben实体中选择一些值。

我尝试将Aufgaben.php中的值添加到集合中。

class HelferType extends AbstractType {
private $aufgaben;
public function __construct($aufgaben) {
    $this->aufgaben = $aufgaben;
}
/**
 *
 * @param FormBuilderInterface $builder         
 * @param array $options            
 */
public function buildForm(FormBuilderInterface $builder, array $options) {
    $builder->add ( 'name' )->add ( 'lastName' )->add ( 'tel' )->add ( 'email' )->add ( 'organisation' )->add ( 'age' );

    $builder->add ( 'aufgaben', 'collection', array (
            'type' => 'choice',
            'options' => array (
                    'choices' => $this->aufgaben 
            ) 
    ) );
}

但是这段代码不起作用。

任何想法?

工作流程应该是:

  1. 输入用户信息
  2. 从Aufgaben.php
  3. 中选择一个或多个值
  4. 全部保存
  5. 提前致谢

2 个答案:

答案 0 :(得分:0)

根据您的具体需求,一种可能的解决方案是使用entity form type

public function buildForm(FormBuilderInterface $builder, array $options) {
    $builder->add ( 'name' )->add ( 'lastName' )->add ( 'tel' )->add ( 'email' )->add ( 'organisation' )->add ( 'age' );

    $builder->add ( 'aufgaben', 'entity', array (
            'class' => 'YourBundle:Aufgaben',
            'multiple' => true,
            'property' => 'name',
            'choices' => $this->aufgaben
        )
    );
}

这将导致HTML中的SELECT标记。

答案 1 :(得分:0)

也许thisthis可以为您提供帮助。

我解决了这种情况,它覆盖了我的实体文件中的__toString()方法,而不是存储库文件。