をレンダリングし、私はこの問題を持っています"Doctrine \ ORM \ PersistentCollection"クラスに公開アクセス権を持っています....私は自分のエンティティとコントローラを配置します。助けてください(匿名)これで私:私は関係多対多で問題</p> <p>プロパティ「ノンブル」も方法の一つ「どちらを持つ、コントローラ内のテンプレート小枝をレンダリングする際にこれを助けてくださいテンプレートの関係多対多のSymfony教義
<?php
namespace AdminBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
use Doctrine\Common\Collections\ArrayCollection;
/**
* Menu
*
* @ORM\Table(name="menu")
* @ORM\Entity(repositoryClass="AdminBundle\Repository\MenuRepository")
*/
class Menu
{
/**
* @var int
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var float
* @Assert\NotBlank()
* @Assert\Type(type="float")
* @ORM\Column(name="precio", type="float")
*/
private $precio;
/**
* @var \DateTime
* @Assert\Date()
* @Assert\NotBlank()
* @ORM\Column(name="fecha", type="date")
*/
private $fecha;
/**
* @var \DateTime
* @Assert\DateTime()
* @Assert\NotBlank()
* @ORM\Column(name="fechacomprar", type="datetime")
*/
private $fechacomprar;
/**
* @var \DateTime
* @Assert\DateTime()
* @Assert\NotBlank()
* @ORM\Column(name="fechavence", type="datetime")
*/
private $fechavence;
/**
* @var \Doctrine\Common\Collections\Collection
*
* @ORM\ManyToMany(targetEntity="Alimento", inversedBy="menu")
* @ORM\JoinTable(name="alimento_menu",
* joinColumns={
* @ORM\JoinColumn(name="menu_id", referencedColumnName="id")
* },
* inverseJoinColumns={
* @ORM\JoinColumn(name="alimento_id", referencedColumnName="id")
* }
*)
*/
private $alimento;
/**
* Constructor
*/
public function __construct()
{
$this->alimento = new ArrayCollection();
}
/**
* Get id
*
* @return integer
*/
public function getId()
{
return $this->id;
}
/**
* Set precio
*
* @param float $precio
*
* @return Menu
*/
public function setPrecio($precio)
{
$this->precio = $precio;
return $this;
}
/**
* Get precio
*
* @return float
*/
public function getPrecio()
{
return $this->precio;
}
/**
* Set fecha
*
* @param \DateTime $fecha
*
* @return Menu
*/
public function setFecha($fecha)
{
$this->fecha = $fecha;
return $this;
}
/**
* Get fecha
*
* @return \DateTime
*/
public function getFecha()
{
return $this->fecha;
}
/**
* Set fechacomprar
*
* @param \DateTime $fechacomprar
*
* @return Menu
*/
public function setFechacomprar($fechacomprar)
{
$this->fechacomprar = $fechacomprar;
return $this;
}
/**
* Get fechacomprar
*
* @return \DateTime
*/
public function getFechacomprar()
{
return $this->fechacomprar;
}
/**
* Set fechavence
*
* @param \DateTime $fechavence
*
* @return Menu
*/
public function setFechavence($fechavence)
{
$this->fechavence = $fechavence;
return $this;
}
/**
* Get fechavence
*
* @return \DateTime
*/
public function getFechavence()
{
return $this->fechavence;
}
/**
* Add alimento
*
* @param \AdminBundle\Entity\Alimento $alimento
*
* @return Menu
*/
public function addAlimento(Alimento $alimento)
{
$this->alimento[] = $alimento;
return $this;
}
/**
* Remove alimento
*
* @param \AdminBundle\Entity\Alimento $alimento
*/
public function removeAlimento(Alimento $alimento)
{
$this->alimento->removeElement($alimento);
}
/**
* Get alimento
*
* @return \Doctrine\Common\Collections\Collection
*/
public function getAlimento()
{
return $this->alimento;
}
}
<?php
namespace AdminBundle\Entity;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
use Symfony\Bridge\Doctrine\Validator\Constraints as DoctrineAssert;
/**
* Alimento
*
* @ORM\Table(name="alimento")
* @ORM\Entity(repositoryClass="AdminBundle\Repository\AlimentoRepository")
* @DoctrineAssert\UniqueEntity("nombre")
*/
class Alimento
{
/**
* @var int
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
* @Assert\NotBlank(message="Debe escribir un alimento")
* @Assert\Type(type="string")
* @Assert\Regex(pattern="/\d/", match=false, message="Debe escribir un nombre válido")
* @ORM\Column(name="nombre", type="string", length=255, unique=true)
*/
private $nombre;
/**
* @var float
* @Assert\NotBlank(message="Debe especificar un precio")
* @Assert\Type(type="float", message="Debe escribir un precio válido")
* @ORM\Column(name="precio", type="float")
*/
private $precio;
/**
* @ORM\ManyToOne(targetEntity="TipoAlimento")
* @Assert\NotBlank()
*/
private $tipo;
/**
* @var \Doctrine\Common\Collections\Collection
*
* @ORM\ManyToMany(targetEntity="Menu", mappedBy="alimento")
*/
private $menu;
/**
* Get id
*
* @return integer
*/
public function getId()
{
return $this->id;
}
/**
* Set nombre
*
* @param string $nombre
*
* @return Alimento
*/
public function setNombre($nombre)
{
$this->nombre = $nombre;
return $this;
}
/**
* Get nombre
*
* @return string
*/
public function getNombre()
{
return $this->nombre;
}
/**
* Set precio
*
* @param float $precio
*
* @return Alimento
*/
public function setPrecio($precio)
{
$this->precio = $precio;
return $this;
}
/**
* Get precio
*
* @return float
*/
public function getPrecio()
{
return $this->precio;
}
/**
* Set tipo
*
* @param \AdminBundle\Entity\TipoAlimento $tipo
*
* @return Alimento
*/
public function setTipo(TipoAlimento $tipo)
{
$this->tipo = $tipo;
return $this;
}
/**
* Get tipo
*
* @return \AdminBundle\Entity\TipoAlimento
*/
public function getTipo()
{
return $this->tipo;
}
/**
* @return string
*/
function __toString()
{
return $this->getNombre();
}
/**
* Constructor
*/
public function __construct()
{
$this->menu = new ArrayCollection();
}
/**
* Add menu
*
* @param \AdminBundle\Entity\Menu $menu
*
* @return Alimento
*/
public function addMenu(Menu $menu)
{
$this->menu[] = $menu;
return $this;
}
/**
* Remove menu
*
* @param \AdminBundle\Entity\Menu $menu
*/
public function removeMenu(Menu $menu)
{
$this->menu->removeElement($menu);
}
/**
* Get menu
*
* @return \Doctrine\Common\Collections\Collection
*/
public function getMenu()
{
return $this->menu;
}
}
コントローラ:
public function indexAction()
{
$em = $this->getDoctrine()->getManager();
$menu = $em->getRepository('AdminBundle:Menu')->findAll();
return $this->render('AdminBundle:menu:index.html.twig', array(
'menu' => $menu,
));`enter code here`
}
そしてテンプレートで、私はこのようなことをやっている:ここ
{% for m in menu %}
<tr>
<td>{{ m.id }}</td>
<td>{{ m.fecha | date('d/m/y') }}</td>
<td>{{ m.alimento.nombre }}</td>
<td>{{ m.fechacomprar | date('d/m/y') }}</td>
<td>{{ m.fechavence | date('d/m/y') }}</td>
<td>{{ m.precio }}</td>
</tr>
{% endfor %}
問題は間違っm.alimento.nombreです!それはあなたがそれぞれをループに持っているので、各メニューには、多くのアリメントスを持っていることを意味し、その多くに多くのなら
m.alimentoはコレクションです。 m.alimento%{{alimento.nombre}} {%endfor%} –
にあなたのエラーメッセージを表示してください。 – habibun