我是新来的Symfony Doctrine并想重写我的旧应用程序。对于一个视图,我需要从一个表中的所有东西,我会正常使用find()。但我也必须通过连接访问anoter值。Symfony2:加入find()的结果
是否有可能将查询生成器与find()方法结合起来?
这是我目前的操作:
$em = $this->getDoctrine()->getManager();
$rep = $em->getRepository('PaulInkBundle:Artist');
$artist = $rep->find($id);
$styles = $rep->getStyles($id);
return $this->render('PaulInkBundle:Artist:artist.html.twig', array(
'artist' => $artist,
'styles' => $styles
));
的getStyles()方法获取链接到艺术家的风格:
public function getStyles($id)
{
return $this->getEntityManager()
->createQuery(
'SELECT s.name
FROM PaulInkBundle:Style s
WHERE s.id IN (
SELECT st.style
FROM PaulInkBundle:ArtistStyle st
WHERE st.artist = :id) '
)->setParameter('id',$id)
->getResult();
}
是否可以在一个功能,因此不必做此艺术家tat中的风格被传递给视图?
编辑:
的关联:
艺术家(NR) - > ArtistStyle(artist.nr/style.nr)< - 风格(NR,名)
因此,我想得到所有样式,名称以特异性艺术家ID
class Artist
{
/**
* @var int
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
*
* @ORM\Column(name="name", type="string", length=255)
*/
private $name;
}
class ArtistStyle
{
/**
* @var int
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var int
*
* @ORM\Column(name="artist", type="integer")
*/
private $artist;
/**
* @var int
*
* @ORM\Column(name="style", type="integer")
*/
private $style;
}
class Style
{
/**
* @var int
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
*
* @ORM\Column(name="name", type="string", length=255, unique=true)
*/
private $name;
/**
* @var string
*
* @ORM\Column(name="descr", type="text")
*/
private $descr;
}
你能证明你的实体协会(PaulInkBundle:样式,PaulInkBundle: ArtistStyle)? –
@PeterPopelyskho @PeterPopelyskho添加(很差,bc我在火车上w /电话) – TechTreeDev