2017-12-04 8 views
-1

をレンダリングし、私はこの問題を持っています"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です!それはあなたがそれぞれをループに持っているので、各メニューには、多くのアリメントスを持っていることを意味し、その多くに多くのなら

+2

m.alimentoはコレクションです。 m.alimento%{{alimento.nombre}} {%endfor%} –

+1

にあなたのエラーメッセージを表示してください。 – habibun

答えて

1

単にあなたはこれを試すことができ、この場合には、m.alimentoはAlimentoの__toString

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

を返します。そのうちの。

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

私はこれを信じることができません、私はこの問題を2日間抱えていて、今は固定です、ありがとう、本当にありがとう!.....このウェブは最高です! –

+0

あなたは大歓迎です – Carlos