Php Doctrine/DQL获取具有完全相同的相关实体的实体

Php Doctrine/DQL获取具有完全相同的相关实体的实体,php,doctrine,dql,Php,Doctrine,Dql,假设我有一个实体Person,它与Vehicle 我怎样才能找到另一个人拥有完全相同的车辆 例如: 人员1(ID=1)拥有ID为5、6和7的车辆 人员2(ID=2)的车辆ID为5,6,8->不应与人员1匹配 人员3(ID=3)拥有ID为5的车辆->不应与人员1匹配 人员4(ID=4)拥有ID为5、6和7的车辆->应与人员1匹配 人员5(ID=5)拥有ID为5、6和7的车辆->应与人员1和人员4匹配 那么DQL表达式是什么呢 我已经尝试了“IN”,但这也将匹配,即使只是我的一个id的匹配 谢谢清洁

假设我有一个实体
Person
,它与
Vehicle

我怎样才能找到另一个人拥有完全相同的车辆

例如:

人员1(ID=1)拥有ID为5、6和7的车辆

人员2(ID=2)的车辆ID为5,6,8->不应与人员1匹配

人员3(ID=3)拥有ID为5的车辆->不应与人员1匹配

人员4(ID=4)拥有ID为5、6和7的车辆->应与人员1匹配

人员5(ID=5)拥有ID为5、6和7的车辆->应与人员1和人员4匹配

那么DQL表达式是什么呢

我已经尝试了“IN”,但这也将匹配,即使只是我的一个id的匹配


谢谢

清洁
DQL

$query = $entityManager->createQuery("
  SELECT p, pv 
    FROM Person p
    INNER JOIN p.vehicles pv 
    WHERE pv.id in (
      SELECT v.id
        FROM Vehicle v
        INNER JOIN v.persons vp
        WHERE p.id <> vp.id
    ) GROUP BY p.id
    HAVING count(pv.id) > 1");
$persons = $query->getResult();
<?php

$query = $entityManager->createQuery("select p,v from Person p JOIN p.vehicles v");
$persons = $query->getArrayResult();

$personsIdsWithSameVehicles = [];

foreach ($persons as $person) {
    $vehiclesIds = array_column($person['vehicles'], 'id');
    $subPersons = array_filter($persons, function($filterPerson) use ($person) {
       if($filterPerson['id'] != $person['id']) return $filterPerson;
    });

    foreach ($subPersons as $subPerson) {
        $subVehiclesIds = array_column($subPerson['vehicles'], 'id');
        if(count($vehiclesIds) == count($subVehiclesIds) and
            empty(array_diff($vehiclesIds, $subVehiclesIds))) {

            $personsIdsWithSameVehicles[] = $person['id'];
            break;

        }
    }
}

$personsQuery = $entityManager->createQuery("select p from Person p where p.id IN(:persons)");
$personsQuery->setParameter('persons', $personsIdsWithSameVehicles);
$personsWithSameVehicles = $personsQuery->getResult();