【问题标题】:Symfony 2 Self referencing many to many repositorySymfony 2 自引用多对多存储库
【发布时间】:2013-07-19 19:44:58
【问题描述】:

我的用户实体有一个自引用多对多关系,因为他们可以有很多关注者或关注很多其他用户。

我现在正在尝试在用户存储库中编写一个查询,以确定用户是否正在关注另一个用户。

我试图直接在 user_relations(映射表)上编写查询,但它不会让我因为它与用户实体无关。

所以我尝试了:

$query = $this->createQueryBuilder('u')
            ->select('count(u.id)')
            ->innerJoin('u.following', 'r')
            ->where('u.id = :userID')
            ->where('r.from_id = :followingID')
            ->setParameter('userID', $userId)
            ->setParameter('followingID', $followingId)

这会导致错误,指出用户实体没有名为 from_uid 的字段。

我怎么能正确地做到这一点?

【问题讨论】:

  • r.from_id 是一个映射 User::$from_id。猜测'r'是一个用户实体,试试r.id?我只是假设,因为您的 User 实体未添加到您的问题中。
  • 啊,就像你说的 r.id 是正确的,因为它没有查看映射表 user_relations,就像我想的那样,它查看的是另一个用户实体。我一直在尝试使用表格而不是实体来使用类似的教义语言。
  • :) 但它不是......它是对象关系;) 如果你定义一个关系,大多数时候targetEntity 的实例在另一边。或包含它们实例的集合/数组。或者只是null。当你遇到这样的错误时,请记住这一点;)

标签: mysql database symfony doctrine-orm


【解决方案1】:

您可以使用MEMBER OF教义关键字

$query = $em->createQuery('SELECT u.id FROM User u WHERE :followingID MEMBER OF u.following'); 
$query->setParameter('followingID', $followingId); 
$ids = $query->getResult();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-17
    • 1970-01-01
    相关资源
    最近更新 更多