Many To Many как достать все внесения где отсутствуют отношения?

В Symfony, для достижения отношения "Многие ко многим" (Many-to-Many) между двумя сущностями, необходимо создать третью сущность, называемую "сущность связи" (join entity) или "промежуточную таблицу" (junction table). Такая сущность содержит связи между основными двумя сущностями.

Предположим, у вас есть две сущности "User" и "Group". Рассмотрим пример, где один пользователь может быть участником нескольких групп, а каждая группа может содержать несколько пользователей.

Для создания связи "Многие ко многим" в Symfony вы можете использовать аннотации Doctrine. В классе "User" вы добавляете следующую аннотацию для определения отношения:

/**
 * @ORMManyToMany(targetEntity="AppEntityGroup", inversedBy="users")
 * @ORMJoinTable(
 *     name="user_group",
 *     joinColumns={
 *         @ORMJoinColumn(name="user_id", referencedColumnName="id")
 *     },
 *     inverseJoinColumns={
 *         @ORMJoinColumn(name="group_id", referencedColumnName="id")
 *     }
 * )
 */
private $groups;

И в классе "Group" аннотация будет такой:

/**
 * @ORMManyToMany(targetEntity="AppEntityUser", mappedBy="groups")
 */
private $users;

Этим мы устанавливаем взаимное отношение между двумя сущностями.

Теперь, чтобы достать все внесения (сущности связи), где отсутствуют отношения, вам нужно получить список всех сущностей связи и проверить, есть ли объекты в обоих категориях связи.

Пример:

$repository = $this->getDoctrine()->getRepository(UserGroup::class);
$allUserGroups = $repository->findAll();

$missingRelations = [];
foreach ($allUserGroups as $userGroup) {
    if ($userGroup->getUser() && $userGroup->getGroup()) {
        $missingRelations[] = $userGroup;
    }
}

// Теперь в $missingRelations будут сущности связи, где отсутствуют отношения

Здесь мы используем репозиторий, чтобы получить все сущности связи (UserGroup), а затем проходимся по ним и проверяем, есть ли объекты пользователя и группы в каждой сущности связи. Если оба объекта присутствуют, значит, отношение существует. Если один или оба объекта отсутствуют, значит, отношения нет и мы добавляем данную сущность связи в массив $missingRelations.

Теперь у вас есть список всех сущностей связи, где отсутствуют отношения. Вы можете использовать эту информацию для дальнейшей обработки, вывода или выполнения других операций в вашем проекте.