php - 如何在Doctrine2中查询WHERE = 'value from a related Entity'

标签 php json symfony orm doctrine-orm

这种关系很简单 许多帖子 -> 一个用户

// 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/

相关文章:

caching - Symfony2开发环境不会自动清除缓存

php - 单独的后端 (Symfony2) 和前端 (AngularJS) REST - 如何进行身份验证

symfony - 如何使用 OpenAPI 和 API 平台正确描述请求体?

php - 用输入框更新MySQL -- PHP MYSQL HTML

php gd : image cannot be displayed because it contains errors

php - 什么情况下黑客会拿到表,却拿不到PHP代码?

asp.net-mvc - 将带有字符串的 json 数组发布到 Asp.Net MVC Action Controller 始终为空

php - 使用 PHP 的大量 SQLite 插入

javascript - 在 JavaScript 中检索 XML 文档的所有值

java - 解析来自维基百科的 JSON 响应时遇到问题