我知道,有很多关于这个主题的帖子,但对我来说,获得正确的解决方案是不可能的。
我有2个具有多对多关系的实体,并且在该关系中有许多列(这意味着3个实体)。我有两个问题:
SQL是Lazy-loadinig,但我写了#34; SELECT l,ul ...",所以我想选择两个表。为什么还懒加载?是否有任何配置??
如何在我的Twig模板中显示?
我的实体或多或少是这样的: 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));
当我尝试调试变量时,程序会被阻止。
任何人都可以帮助我??? 干杯