【问题标题】:Symfony2/Doctrine2 : I would like to get the data from user informationSymfony2/Doctrine2 : 我想从用户信息中获取数据
【发布时间】:2012-12-02 05:21:24
【问题描述】:
My\SampleBundle\Entity\Subject:

    // ...

    manyToOne:
        author:
            targetEntity: My\UserBundle\Entity\User
            joinColumn:
                name: owner
                referencedColumnName: id

与主题相关的用户可以获取。

$query = $this->getEntityManager()
              ->createQuery('
                  SELECT s, a
                  FROM MySampleBundle:Subject s
                  LEFT JOIN s.author a
                  WHERE s.author = :author
                  GROUP BY s.title'
              )
              ->setParameter("author", $author);

相反,我应该如何从用户信息中获取主题?

例如,用户列表页面中的查询。

$query = $this->getEntityManager()
              ->createQuery('
                  SELECT u
                  FROM MyUserBundle:User u
                  GROUP BY u.username'
              );

此时,我也想获取一个相关科目的数据。

我使用 FOSUserBundle。
这是一个应该纠正 My\UserBundle\Entity 的问题吗?
还是从 orm 设置阶段就错了?

【问题讨论】:

  • 请在下面添加您的解决方案作为答案。简要说明您更改了什么以及如何解决它。这将使它成为一个完美的问答条目。如果您遇到任何问题,请告诉我。是的,可以回答您自己的问题(然后接受答案)。
  • 好的,它添加到文本中。但这不是完美的解决方案。获取了简单的数据。但是,当join table增加时,它停止应答,并且一直处于loading状态。我认为数据不一定太重。问题还没搞明白。
  • 即使您对答案不是 100% 满意,也请不要只编辑您的问题,而是将其添加为答案下面(新的空框)。在您回答了您的问题并经过了一段时间后,您可以接受它作为答案,这会将您的问题标记为“已解决”。至少对于其他用户来说,问题和答案是什么更清楚。这甚至可能会吸引其他可能会留下另一个答案的人。
  • 好的,我会这样做的。谢谢你的建议。

标签: php symfony doctrine-orm


【解决方案1】:

我修改的程序。

STEP:1 添加到 My\UserBundle\Entity\User

/**
 * @ORM\OneToMany(targetEntity="My\SampleBundle\Entity\Subject", mappedBy="author")
 */
private $subjects;

/**
 * Get subjects
 *
 * @return Doctrine\Common\Collections\Collection 
 */
public function getSubjects()
{
    return $this->subjects;
}

STEP:2 添加'inversedBy'

My\SampleBundle\Entity\Subject:
    type: entity

    // ...

    manyToOne:
        author:
            targetEntity: My\UserBundle\Entity\User
            inversedBy: subjects
            joinColumn:
                name: owner
                referencedColumnName: id

STEP:3 查询

$query = $this->getEntityManager()
              ->createQuery('
                  SELECT u, s
                  FROM MyUserBundle:User u
                  LEFT JOIN u.subjects s
                  ORDER BY u.username'
              );

已获取简单数据。 但这不是完美的解决方案。

连接表增加时停止应答,一直处于加载状态。
我认为数据不一定太重。
问题还没搞明白。

另一个问题的例子

$query = $this->getEntityManager()
              ->createQuery('
                  SELECT u, s, a, c, i
                  FROM MyUserBundle:User u
                  LEFT JOIN u.subjects s
                  LEFT JOIN u.articles a
                  LEFT JOIN u.comments c
                  LEFT JOIN u.images i
                  // etc...
                  // It will be in the state of loading all the time
                  // when join table increases.
                  ORDER BY u.username'
              );

【讨论】:

  • 它们是我的想象。还涉及到页面功能,我认为是因为数据太多。我认为现在基本数据采集是可以的。
猜你喜欢
  • 1970-01-01
  • 2014-07-19
  • 2023-04-06
  • 2019-06-13
  • 1970-01-01
  • 2019-12-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多