这种关系很简单 许多帖子 -> 一个用户
// Acme\AppBundle\Entity\UploadPlugin\Post
/**
* @ORM\ManyToOne(targetEntity="Acme\AppBundle\Entity\AuthBundle\LiveUser")
* @ORM\JoinColumn(name="posts", referencedColumnName="id")
**/
private $postOwner;
所以当我创建这样的新帖子时:
$image = new Post();
$image->setName($imagetitle);
$image->setPostowner($this->getUser());
//(...) set further stuff
$em = $this->getDoctrine()->getManager();
$em->persist($image);
$em->flush();
我只是从 Controller 返回一个 json:
$posts= $em->createQuery(
"SELECT p
FROM GabrielAppBundle:UploadPlugin\Post p"
)->getResult();
$serializer = $this->container->get('jms_serializer');
$json = $serializer->serialize($posts, 'json');
$response = new Response($json);
$response->headers->set('Content-Type', 'application/json');
return $response;
它返回这样的 JSON
[{
"id": 10,
"name": "So das Alkoholfrei",
"path": "so-das-alkoholfrei_546.png",
"type": "image",
"post_owner": {
"uname": "gabriel",
"fname": "Will",
"lname": "Smith",
"ppic": "profilepic_61602.png"
},
"created_at": "2015-06-19T23:58:35+0200",
"updated_at": "2015-06-19T23:58:35+0200"
}
]
现在我需要一个代码,让我可以根据用户名获取所有用户帖子,但我不知道如何实现这一点。
我需要类似的东西,或其他解决方案
$posts= $em->createQuery(
"SELECT p
FROM GabrielAppBundle:UploadPlugin\Post p WHERE p.postOwner.uname = :username"
)->setParameter('username','john')
->getResult();
最佳答案
您可以使用 DQL join :
$posts= $em->createQuery(
"SELECT p, po
FROM GabrielAppBundle:UploadPlugin\Post p
JOIN AcmeAppBundle:AuthBundle\LiveUser po
WHERE po.uname = :username"
)->setParameter('username','john')
->getResult();
请注意,“SELECT p, po”会导致每个帖子的 $postOwner 通过查询进行水合,而不是需要执行额外的查询来检索每个帖子。如果您不需要 $postOwner 数据,而只需要根据其中一个值进行选择,那么“SELECT p”就足够了。
关于php - 如何在Doctrine2中查询WHERE = 'value from a related Entity',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30958364/