Array Sammlung, symfony: hinzufügen einer Beziehung
Ich bin neu von Symfony und php, und ich versuche zu verstehen, ohne Ergebnis, das array Sammlung.
Nun habe ich zwei Entität, die Mission und die Benutzer, im Bezug ManytoMany. Ich habe ein Formular zum erstellen neuer Missionen und eine Formular zum erstellen neuer Benutzer.
Nun muss ich schaffen, einen "modifyMissionAction", dass mir erlaubt, zu legen Sie die Benutzer für diese Missionen, aber ich Verstand nicht, wie es zu tun.
Ich Lesen Sie die Dokumentation hier aber es hilft nicht. Wie konnte ich das tun?
Danke
Dies ist meine User-Entität:
abstract class User extends BaseUser
{
/**
* @var \Doctrine\Common\Collections\ArrayCollection
*
* @ORM\ManyToMany(targetEntity="Acme\ManagementBundle\Entity\Mission", inversedBy="users", orphanRemoval=true)
* @ORM\JoinTable(name="user_mission")
*/
private $missions;
/**
* Add missions
*
* @param \Acme\ManagementBundle\Entity\Mission $missions
* @return User
*/
public function addMission(\Acme\ManagementBundle\Entity\Mission $missions)
{
$this->missions[] = $missions;
return $this;
}
//...
Und meine Mission Einheit:
<?php
namespace Acme\ManagementBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
/**
* @ORM\Entity
*/
class Mission {
/**
* @ORM\Id
* @ORM\GeneratedValue
* @ORM\Column(type="integer")
* @var integer
*/
protected $id;
/**
* @ORM\Column(type="string", length=60)
* @var String
*/
protected $name;
/**
* @ORM\Column(type="string", length=600)
* @var String
*/
protected $description;
/**
* @var \Doctrine\Common\Collections\ArrayCollection
*
* @ORM\ManyToMany(targetEntity="Acme\ManagementBundle\Entity\User", mappedBy="missions", cascade={"all"}, orphanRemoval=true)
*/
private $users;
public function __construct(){
$this -> users = new ArrayCollection();
}
/**
* Get id
*
* @return integer
*/
public function getId()
{
return $this->id;
}
/**
* Set name
*
* @param string $name
* @return Mission
*/
public function setName($name)
{
$this->name = $name;
return $this;
}
/**
* Get name
*
* @return string
*/
public function getName()
{
return $this->name;
}
/**
* Set description
*
* @param string $description
* @return Mission
*/
public function setDescription($description)
{
$this->description = $description;
return $this;
}
/**
* Get description
*
* @return string
*/
public function getDescription()
{
return $this->description;
}
/**
* Add users
*
* @param \Acme\ManagementBundle\Entity\User $users
* @return Mission
*/
public function addUser(\Acme\ManagementBundle\Entity\User $users)
{
$this->users[] = $users;
return $this;
}
/**
* Remove users
*
* @param \Acme\ManagementBundle\Entity\User $users
*/
public function removeUser(\Acme\ManagementBundle\Entity\User $users)
{
$this->users->removeElement($users);
}
/**
* Get users
*
* @return \Doctrine\Common\Collections\Collection
*/
public function getUsers()
{
return $this->users;
}
public function __toString()
{
return $this->name;
}
}
InformationsquelleAutor Gianni Alessandro | 2014-01-29
Du musst angemeldet sein, um einen Kommentar abzugeben.
zunächst vergessen Sie nicht, fügen Sie __Konstruktor für beide Klassen und init ArrayCollection:
Ich gehe davon aus, das Sie hinzufügen möchten-controller-action-Hexe können Sie beziehen Benutzer-Objekt oder die Objekte, die in die mission-Objekt. Bitte Lesen Sie embbed Teil Symfony-Buch
Dann erstellen Sie Ihre Aktion. Am wichtigsten ist das hinzufügen von Formular-element, mit eingebettet ist, die form der Benutzer-Entität:
Überprüfen Ihre routing. Sollten Sie route Bearbeiten-Aktion mit
{id}
param. Wenn der name des param-Elements nicht passt, ändern Sie es in der route und in der Funktion definition:Dann definieren Sie die Form, Geben Sie für Benutzer-Objekte:
Und registrieren Sie einen Typ in Dienst.yml:
Glück!
Es tut mir Leid, ich habe einen Tippfehler gemacht. Im controller, editAction, ändern Sie Zeile
->add('user', 'user')
zu->add('users', 'user')
. "Benutzer" ist ein Attribut name, "Benutzer" ist eine form geben. Dies sollte fix für Fehler.Darüber hinaus können Sie ändern Parameter FormType, wenn Sie es zu bilden in der Controller action. E. g, wenn Sie nicht wollen, um erfordern Benutzer bezogene Objekt -, Feld-nicht erforderlich, Sie können es nennen, wie diese:
->add('users', 'user', array('require' => false))
Super, es funktioniert. Eigentlich erstellt es eine neue mission mit dem Benutzer assoziiert ist; jetzt bin ich versucht, zu erstellen eine editAction, dass es ermöglicht das verknüpfen vorhandener mission mit dem bestehenden Benutzer, aber ich bin die Dokumentation Lesen, und ich denke, dass ich es tun kann. Wenn ich das problem habe werde ich hier posten. Danke!!!
Ich bin froh zu helfen 🙂
InformationsquelleAutor WebHQ