Для создания отношения 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
.