Symfony2:多对多,带有额外的列,不在细枝中懒惰
我知道,有很多关于这个话题的帖子,但对我来说,要找到正确的解决方案是不可能的 我有两个实体和多对多的关系,在这个关系中有许多列(这意味着3个实体)。我有两个问题: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
/**
* 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));