Как мне создать отношение ManyToOne при джойне к 2 колонкам?

Для создания отношения ManyToOne и джойна к двум колонкам в Symfony, вам следует использовать аннотацию @ManyToOne в сочетании с аннотацией @JoinColumns.

@ManyToOne указывает, что у вас есть отношение ManyToOne между двумя сущностями. Он принимает несколько параметров, включая targetEntity, inversedBy, joinColumns и другие.

targetEntity - указывает на класс, к которому вы хотите создать отношение ManyToOne.
inversedBy - указывает на поле в целевой сущности, которое создает обратную связь на вашу текущую сущность. Это поле должно быть отношением OneToMany.
joinColumns - это массив, в котором вы можете указать колонки, к которым вы хотите сделать джойн. Каждая колонка представляется объектом @JoinColumn, который принимает параметры name и referencedColumnName. name - это имя колонки, которую вы хотите джойнить, а referencedColumnName - это имя колонки, на которую вы хотите сделать джойн.

Пример:

use DoctrineORMMapping as ORM;

/**
 * @ORMEntity
 */
class User
{
    /**
     * @ORMId
     * @ORMGeneratedValue(strategy="AUTO")
     * @ORMColumn(type="integer")
     */
    private $id;

    /**
     * @ORMManyToOne(targetEntity="Group")
     * @ORMJoinColumns({
     *   @ORMJoinColumn(name="group_id", referencedColumnName="id"),
     *   @ORMJoinColumn(name="subgroup_id", referencedColumnName="subgroup_id")
     * })
     */
    private $group;
    
    // ...
}

/**
 * @ORMEntity
 */
class Group
{
    /**
     * @ORMId
     * @ORMGeneratedValue(strategy="AUTO")
     * @ORMColumn(type="integer")
     */
    private $id;
    
    /**
     * @ORMColumn(type="integer")
     */
    private $subgroupId;

    // ...
}

В этом примере у нас есть две сущности - User и Group. У сущности User есть поле $group, которое является отношением ManyToOne к сущности Group. В аннотации @JoinColumns мы указываем две колонки - group_id и subgroup_id, на которые будет осуществляться джойн. Каждая колонка имеет соответствующие значения name и referencedColumnName.