繁体   English   中英

渲染模板关系ManyToMany Symfony原则

[英]Render template relation ManyToMany Symfony Doctrine

请对此提供帮助,当我在控制器中渲染模板树枝时出现问题,与ManyToMany有关系

属性“ nombre”或方法“ nombre()”,“ getnombre()” /“ isnombre()”或“ __call()”之一都不存在,并且在类“ 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是错误的!

只需尝试一下,在这种情况下,m.alimento将返回Alimento的__toString

{{  m.alimento|join(',') }}

如果是多对多,则意味着每个菜单都会有许多食品,因此您必须遍历每个食品。

{% for a in m.alimento %}
<td>{{ a.nombre }}</td>
{% endfor %}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM