请帮忙解决这个问题,当我在控制器中渲染模板树枝时遇到此问题,遇到关系问题很多很多
财产" nombre"也没有一种方法" nombre()"," getnombre()" /" isnombre()"或" __ call()"在课堂上存在并拥有公共访问权限#34; Doctrine \ ORM \ PersistentCollection" ....我将把我的实体和控制器,请帮助我:
<?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错了!
答案 0 :(得分:1)
只需你可以试试这个,在这种情况下,m.alimento将返回Alimento的__toString
{{ m.alimento|join(',') }}
答案 1 :(得分:1)
如果它是多对多,这意味着每个菜单都会有很多食物,所以你必须遍历每个菜单。
{% for a in m.alimento %}
<td>{{ a.nombre }}</td>
{% endfor %}