在Doctrine2中,在映射Many-To-Many关系时,可能会出现重复的关系,这可能会导致错误。以下是避免重复Many-To-Many关系的解决方案:
/**
* @ORM\Entity
* @ORM\Table(name="product")
* @UniqueEntity(fields={"product_id", "group_id"})
*/
class Product
{
// ...
/**
* @ORM\ManyToMany(targetEntity="Group")
* @JoinTable(
* name="product_group",
* joinColumns={
* @JoinColumn(name="product_id", referencedColumnName="id"),
* },
* inverseJoinColumns={
* @JoinColumn(name="group_id", referencedColumnName="id"),
* }
* )
*/
private $groups;
// ...
}
/**
* @ORM\Entity()
* @ORM\Table(name="post")
* @UniqueEntity(fields={"slug", "locale"})
*/
class Post
{
//...
}
$query = $em->createQueryBuilder()
->select("g")
->from("Group", "g")
->leftJoin("g.products", "p")
->where("p.id = :productId")
->setParameter("productId", $productId)
->groupBy("g.id")
->getQuery();
$group = $query->getSingleResult();
以上是避免重复Many-To-Many关系的几种方法,可以根据具体情况选择适合的方法来解决问题。