Symfony2:在Twig中使用额外列而不是Lazy的多对多

时间:2014-08-05 15:20:37

标签: symfony doctrine-orm many-to-many twig lazy-evaluation

我知道,有很多关于这个主题的帖子,但对我来说,获得正确的解决方案是不可能的。

我有2个具有多对多关系的实体,并且在该关系中有许多列(这意味着3个实体)。我有两个问题:

  1. SQL是Lazy-loadinig,但我写了#34; SELECT l,ul ...",所以我想选择两个表。为什么还懒加载?是否有任何配置??

  2. 如何在我的Twig模板中显示?

  3. 我的实体或多或少是这样的: Usuario:

    /**
     * Usuario
     *
     * @ORM\Table()
     */
    class Usuario
    {
        /**
         * @var integer
         *
         * @ORM\Column(name="id", type="integer")
         * @ORM\Id
         * @ORM\GeneratedValue(strategy="AUTO")
         */
        private $id;
    
        /**
         * @var string
         *
         * @ORM\Column(name="nombre", type="string", length=255)
         */
        private $nombre;
    
        ...
    
        /**
         * @ORM\OneToMany(targetEntity="UsuarioLibro", mappedBy="usuario")
         */
        private $libros;
    
        public function __construct()
        {
            $this->libros = new ArrayCollection();
        }
    
        ...    
    
        /**
         * Get libros
         *
         * @return \Doctrine\Common\Collections\Collection 
         */
        public function getLibros()
        {
            return $this->libros;
        }
    }
    

    Libros:

    /**
     * Libro
     *
     * @ORM\Table()
     */
    class Libro
    {
        /**
         * @var integer
         *
         * @ORM\Column(name="id", type="integer")
         * @ORM\Id
         * @ORM\GeneratedValue(strategy="AUTO")
         */
        private $id;
    
        /**
         * @var string
         *
         * @ORM\Column(name="titulo", type="string", length=255)
         */
        private $titulo;
    
        ...
    
        /**
        * @ORM\OneToMany(targetEntity="UsuarioLibro", mappedBy="libro")
        */
        private $usuarios;
    
        ...
    
        public function __construct()
        {
            $this->usuarios = new ArrayCollection();
        }
    
        ...
    
        /**
         * Get usuarios
         *
         * @return \Doctrine\Common\Collections\Collection 
         */
        public function getUsuarios()
        {
            return $this->usuarios;
        }
    }
    

    UsuariosLibros(关系):

    /**
     * usuario_libro
     *
     * @ORM\Table(name="usuario_libro")
     * @ORM\Entity
     */
    class UsuarioLibro
    {
        /**
         * @var integer
         *
         * @ORM\Column(name="id", type="integer")
         * @ORM\Id
         * @ORM\GeneratedValue(strategy="AUTO")
         */
        private $id;
    
        /**
         * @var integer
         *
         * @ORM\Column(name="tener", type="boolean", options={"default":0})
         */
        private $tener;
    
        /**
         * @var integer
         *
         * @ORM\Column(name="leer", type="boolean", options={"default":0})
         */
        private $leer;
    
         /**
         * @ORM\ManyToOne(targetEntity="usuario", inversedBy="libros")
         */
        private $usuario;
    
        /**
         * @ORM\ManyToOne(targetEntity="libro", inversedBy="usuarios")
         */
        private $libro;
    
        public function __construct(Usuario $usuario, Libro $libro)
        {
            $this->usuario = $usuario;
            $this->libro = $libro;
        }
    
        ...
    
        /**
         * Get usuario
         *
         * @return \JavierGlez\Osprey\FrontendBundle\Entity\usuario 
         */
        public function getUsuario()
        {
            return $this->usuario;
        }
    
        /**
         * Get libro
         *
         * @return \JavierGlez\Osprey\FrontendBundle\Entity\libro 
         */
        public function getLibro()
        {
            return $this->libro;
        }
    }
    

    我可以用这个SQL来处理所有内容:

    $query = $this->getEntityManager()
            ->createQuery(
                "SELECT l, ul FROM JGOspreyFrontendBundle:Libro l
                LEFT JOIN l.usuarios ul
                LEFT JOIN ul.usuario u
                JOIN  l.colecciones c
                WHERE c.id = :idColeccion AND (u.id = :idUsuario OR u.id IS NULL)")
           ->setParameters(array('idColeccion'=>$idColeccion, 'idUsuario'=>$idUsuario));
    

    当我尝试调试变量时,程序会被阻止。

    任何人都可以帮助我??? 干杯

0 个答案:

没有答案