DQL 查询未返回我想要的内容
DQL Queries not returning what I would like
我使用了两个 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()
;
}
这个return没什么,不是单一阵型
编辑:我的查询结果是这样的:
FormationController.php on line 22:
App\Entity\User {#768 ▼
-id: 1
-email: "mail@mail.fr"
-roles: array:2 [▶]
-password: ""
-favorites: Doctrine\ORM\PersistentCollection {#765 ▼
-snapshot: array:1 [ …1]
-owner: App\Entity\User {#768}
-association: array:19 [ …19]
-em: Doctrine\ORM\EntityManager {#563 …11}
-backRefFieldName: null
-typeClass: Doctrine\ORM\Mapping\ClassMetadata {#703 …}
-isDirty: false
#collection: Doctrine\Common\Collections\ArrayCollection {#766 ▼
-elements: array:1 [▼
0 => App\Entity\Formation {#763 ▼
-id: 1
-name: "PHP "
-url: "http://ulrt"
}
]
}
#initialized: true
}
-pseudo: null
}
如您所见,我只收到用户添加到收藏夹的阵型,而我想获得所有阵型,还希望获得哪个用户将此阵型添加到他们的收藏夹的信息。
在 User.php 中,我在 ManyToMany 中有字段收藏夹,这会创建一个 table users_favorites,这就是我想要的。但是我的编队实体上的编队和users_favorites之间没有任何link。
如何在它们之间添加 link ?我需要添加一个字段吗?如果是这样,我该如何定义它,使其不会创建另一个 table,就像它在用户实体上使用收藏夹创建的那样?
所以我假设您正在 UserRepository 中执行 dql 查询,您应该将查询重点放在 FormationRepository 上(假设 User.favorites 的正确 many-to-many 定义具有匹配的 Formation.users: ...):
/**
* @ORM\ManyToMany(targetEntity=User:class, mappedBy="favorites")
*/
private $users;
您可能需要在 User.favorites many-to-many 注释中添加 inversedBy="users"
$qb = $this->createQueryBuilder('formation');
return <$qb->leftJoin('formation.users', 'user')
->addSelect('user')
->getQuery()->getResult();
我使用了两个 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()
;
}
这个return没什么,不是单一阵型
编辑:我的查询结果是这样的:
FormationController.php on line 22:
App\Entity\User {#768 ▼
-id: 1
-email: "mail@mail.fr"
-roles: array:2 [▶]
-password: ""
-favorites: Doctrine\ORM\PersistentCollection {#765 ▼
-snapshot: array:1 [ …1]
-owner: App\Entity\User {#768}
-association: array:19 [ …19]
-em: Doctrine\ORM\EntityManager {#563 …11}
-backRefFieldName: null
-typeClass: Doctrine\ORM\Mapping\ClassMetadata {#703 …}
-isDirty: false
#collection: Doctrine\Common\Collections\ArrayCollection {#766 ▼
-elements: array:1 [▼
0 => App\Entity\Formation {#763 ▼
-id: 1
-name: "PHP "
-url: "http://ulrt"
}
]
}
#initialized: true
}
-pseudo: null
}
如您所见,我只收到用户添加到收藏夹的阵型,而我想获得所有阵型,还希望获得哪个用户将此阵型添加到他们的收藏夹的信息。 在 User.php 中,我在 ManyToMany 中有字段收藏夹,这会创建一个 table users_favorites,这就是我想要的。但是我的编队实体上的编队和users_favorites之间没有任何link。 如何在它们之间添加 link ?我需要添加一个字段吗?如果是这样,我该如何定义它,使其不会创建另一个 table,就像它在用户实体上使用收藏夹创建的那样?
所以我假设您正在 UserRepository 中执行 dql 查询,您应该将查询重点放在 FormationRepository 上(假设 User.favorites 的正确 many-to-many 定义具有匹配的 Formation.users: ...):
/**
* @ORM\ManyToMany(targetEntity=User:class, mappedBy="favorites")
*/
private $users;
您可能需要在 User.favorites many-to-many 注释中添加 inversedBy="users"
$qb = $this->createQueryBuilder('formation');
return <$qb->leftJoin('formation.users', 'user')
->addSelect('user')
->getQuery()->getResult();