zrobiłem przykład z książki W. Gajdy dotyczący relacji 1:n na przykładzie kontynentów i państw
<?php namespace Szymek\RelationsBundle\Controller; use Symfony\Bundle\FrameworkBundle\Controller\Controller; use Szymek\RelationsBundle\Entity\Kontynent; use Szymek\RelationsBundle\Entity\Panstwo; class DefaultController extends Controller { public function indexAction() { $manager = $this->getDoctrine()->getManager(); // dodawanie danych do bazy za pomoca relacji 1:m // // $kontynent = new Kontynent(); // $kontynent->setNazwa('Inny'); // $manager->persist($kontynent); // // $panstwo = new Panstwo(); // $panstwo->setNazwa('Inny kraj'); // $panstwo->setKontynent($kontynent); // $manager->persist($panstwo); // // $manager->flush(); // sciaganie danych z bazy za pomoca relacji 1:m $kontynent = $manager ->getRepository('SzymekRelationsBundle:Kontynent') ->findOneByNazwa('Europa'); $panstwa = $kontynent->getPanstwa(); foreach ($panstwa as $panstwo) { } } }
<?php namespace Szymek\RelationsBundle\Entity; use Doctrine\ORM\Mapping as ORM; /** * Panstwo * * @ORM\Table() * @ORM\Entity */ class Panstwo { /** * @var integer * * @ORM\Column(name="id", type="integer") * @ORM\Id * @ORM\GeneratedValue(strategy="AUTO") */ private $id; /** * @var string * * @ORM\Column(name="nazwa", type="string", length=255) */ private $nazwa; /** * @var integer * * @ORM\Column(name="kontynent_id", type="integer") */ private $kontynentId; /** * @ORM\ManyToOne(targetEntity="Kontynent", inversedBy="panstwa") */ protected $kontynent; /** * Get id * * @return integer */ public function getId() { return $this->id; } /** * Set nazwa * * @param string $nazwa * @return Panstwo */ public function setNazwa($nazwa) { $this->nazwa = $nazwa; return $this; } /** * Get nazwa * * @return string */ public function getNazwa() { return $this->nazwa; } /** * Set kontynentId * * @param integer $kontynentId * @return Panstwo */ public function setKontynentId($kontynentId) { $this->kontynentId = $kontynentId; return $this; } /** * Get kontynentId * * @return integer */ public function getKontynentId() { return $this->kontynentId; } /** * Set kontynent * * @param \Szymek\RelationsBundle\Entity\Kontynent $kontynent * @return Panstwo */ public function setKontynent(\Szymek\RelationsBundle\Entity\Kontynent $kontynent = null) { $this->kontynent = $kontynent; return $this; } /** * Get kontynent * * @return \Szymek\RelationsBundle\Entity\Kontynent */ public function getKontynent() { return $this->kontynent; } }
<?php namespace Szymek\RelationsBundle\Entity; use Doctrine\ORM\Mapping as ORM; /** * Kontynent * * @ORM\Table() * @ORM\Entity */ class Kontynent { /** * @var integer * * @ORM\Column(name="id", type="integer") * @ORM\Id * @ORM\GeneratedValue(strategy="AUTO") */ private $id; /** * @var string * * @ORM\Column(name="nazwa", type="string", length=255) */ private $nazwa; /** * @ORM\OneToMany(targetEntity="Panstwo", mappedBy="kontynent") */ protected $panstwa; /** * Get id * * @return integer */ public function getId() { return $this->id; } /** * Set nazwa * * @param string $nazwa * @return Kontynent */ public function setNazwa($nazwa) { $this->nazwa = $nazwa; return $this; } /** * Get nazwa * * @return string */ public function getNazwa() { return $this->nazwa; } /** * Constructor */ public function __construct() { $this->panstwa = new \Doctrine\Common\Collections\ArrayCollection(); } /** * Add panstwa * * @param \Szymek\RelationsBundle\Entity\Panstwo $panstwa * @return Kontynent */ public function addPanstwa(\Szymek\RelationsBundle\Entity\Panstwo $panstwa) { $this->panstwa[] = $panstwa; return $this; } /** * Remove panstwa * * @param \Szymek\RelationsBundle\Entity\Panstwo $panstwa */ public function removePanstwa(\Szymek\RelationsBundle\Entity\Panstwo $panstwa) { $this->panstwa->removeElement($panstwa); } /** * Get panstwa * * @return \Doctrine\Common\Collections\Collection */ public function getPanstwa() { return $this->panstwa; } }
Lecz niestety nie wiedzieć czemu... zapętla się on.
Jak sobie z tym poradzić? Coś źle robię?
Czyżby samo państwo w pętli for było nadal obiektem i to przez niego się wszystko zapętla?
Jak zrobię:
echo $panstwo->getNazwa();
to wyświetla dobrze.