Witam,
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.