Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Symfony2:多对多,带有额外的列,不在细枝中懒惰_Symfony_Doctrine Orm_Many To Many_Twig_Lazy Evaluation - Fatal编程技术网

Symfony2:多对多,带有额外的列,不在细枝中懒惰

Symfony2:多对多,带有额外的列,不在细枝中懒惰,symfony,doctrine-orm,many-to-many,twig,lazy-evaluation,Symfony,Doctrine Orm,Many To Many,Twig,Lazy Evaluation,我知道,有很多关于这个话题的帖子,但对我来说,要找到正确的解决方案是不可能的 我有两个实体和多对多的关系,在这个关系中有许多列(这意味着3个实体)。我有两个问题: SQL是延迟加载的,但是我写了“SELECTL,ul…”,所以我想选择两个表。为什么还要偷懒加载??任何地方都有配置吗 如何在我的小枝模板中显示它 我的实体或多或少是这样的: 乌萨里奥: 利布罗斯: /** * Libro * * @ORM\Table() */ class Libro { /** * @va

我知道,有很多关于这个话题的帖子,但对我来说,要找到正确的解决方案是不可能的

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

  • SQL是延迟加载的,但是我写了“SELECTL,ul…”,所以我想选择两个表。为什么还要偷懒加载??任何地方都有配置吗

  • 如何在我的小枝模板中显示它

  • 我的实体或多或少是这样的: 乌萨里奥:

    利布罗斯:

    /**
     * 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(关系):

    我可以使用此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));
    
    当我尝试调试变量时,程序就会被阻塞

    有人能帮我吗???
    干杯

    实体结构不正确;创建双向关系时,一端应具有
    mappedBy
    ,另一端应具有
    inversedBy
    。查看此链接了解更多信息是的,我知道:“Usuario”和“Libro”是mappedBy,但“UsuarioLibro”是inversedBy。你可以看到,哦,也许你是指另一件事。无论如何,我想检查一下你写的链接。谢谢
    /**
     * 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;
        }
    }
    
    $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));