DQL查询未返回我想要的内容



我使用了两个DQL查询。在我的网站上,我有用户和格式。我在User上定义了一个ManyToMany关系,如下所示:

/**
* Many User have Many Phonenumbers.
* @ManyToMany(targetEntity="Formation")
* @JoinTable(name="users_favorites",
*      joinColumns={@JoinColumn(name="user_id", referencedColumnName="id")},
*      inverseJoinColumns={@JoinColumn(name="formation_id", referencedColumnName="id", unique=true)}
*      )
*/
private $favorites;

用户可以将格式添加到他们的收藏夹中。

第一个查询,我想得到所有的格式,还有那些将这个格式添加到他们最喜欢的用户。

public function findAllWithFormation(){
return $this->createQueryBuilder('user')
->join('user.favorites', 'formation')
->addSelect('formation')
->addSelect('user')
->getQuery()
->getOneOrNullResult()
;
}

这没有任何回报,没有一个编队。

编辑:我查询的结果是:

FormationController.php on line 22:
AppEntityUser {#768 ▼
-id: 1
-email: "mail@mail.fr"
-roles: array:2 [▶]
-password: ""
-favorites: DoctrineORMPersistentCollection {#765 ▼
-snapshot: array:1 [ …1]
-owner: AppEntityUser {#768}
-association: array:19 [ …19]
-em: DoctrineORMEntityManager {#563 …11}
-backRefFieldName: null
-typeClass: DoctrineORMMappingClassMetadata {#703 …}
-isDirty: false
#collection: DoctrineCommonCollectionsArrayCollection {#766 ▼
-elements: array:1 [▼
0 => AppEntityFormation {#763 ▼
-id: 1
-name: "PHP "
-url: "http://ulrt"
}
]
}
#initialized: true
}
-pseudo: null
}

正如你所看到的,我只收到用户在收藏夹中添加的信息,而我想获得所有信息,但也有哪个用户在他们的收藏夹中添加了这个信息。在User.php中,我在ManyToMany中有字段收藏夹,这将创建一个表users_favorites,这就是我想要的。但我的编队实体上的编队和用户_收藏夹之间没有任何联系。如何在它们之间添加链接?我需要添加字段吗?如果是,我该如何定义它,使它不会创建另一个表,就像它在用户实体上用收藏夹创建的表一样?

所以我假设你在UserRepository中进行dql查询,你应该把查询的重点放在FormationRepository上(假设User.favorites有一个匹配的Formation.users:…(:

/**
* @ORMManyToMany(targetEntity=User:class, mappedBy="favorites")
*/
private $users;

您可能需要在用户上添加inversedBy="users"。避免多对多注释

$qb = $this->createQueryBuilder('formation');
return <$qb->leftJoin('formation.users', 'user')
->addSelect('user')
->getQuery()->getResult(); 

相关内容

最新更新