Я пишу функцию, которая требует, чтобы записи моей таблицы присоединения содержали дополнительные метаданные ( Таблица объединения с метаданными ).Я попытался реализовать это в соответствии с этим разделом документации Доктрины .
См. Ниже примеры определений сущностей.
Задачатеперь getGroups
и setGroups
не дают / не устанавливают Group
сущностей (& то же самое верно с точки зрения экземпляра Group
), но они дают GroupUser
сущностей.
Это добавляетсущественная задержка процесса управления этими отношениями, которая до сих пор была чрезвычайно гладкой - например, я не могу просто добавить, удалить или проверить наличие Group
в коллекции, которую выдает getGroups
.
Может ли кто-нибудь выявить какие-либо ошибки в моей реализации или порекомендовать более гибкий способ реализации этой концепции?
Заранее благодарен за любой ввод.
РЕДАКТИРОВАТЬ:
Моя основная проблема заключается в следующем: при использовании этой реализации для извлечения коллекции Users из сущности Group требуется посредничество этого метода Entity:
public function getUsers() {
return $this->users->map(function($groupUser){
return $groupUser->getUser();
});
}
Я обеспокоен тем, что это может означать значительную производительность в будущем.Я не прав?
Кроме того, как можно повторно реализовать метод setUsers
?
Субъект группы:
<?php
/**
* @Entity
* @Table(name="group")
*/
class Group {
/**
* @Column(type="integer", nullable=false)
* @Id
*/
protected $id = null;
/**
* @OneToMany(targetEntity="GroupUser", mappedBy="group")
* @var \Doctrine\Common\Collections\Collection
*/
protected $users;
}
Субъект пользователя:
<?php
/**
* @Entity
* @Table(name="user")
*/
class User {
/**
* @Column(type="integer", nullable=false)
* @Id
*/
protected $id = null;
/**
* @OneToMany(targetEntity="GroupUser", mappedBy="user")
* @var \Doctrine\Common\Collections\Collection
*/
protected $groups;
}
Присоединяющийся объект:
<?php
/**
* @Entity
* @Table(name="group_user")
*/
class GroupUser {
/**
* @Id
* @ManyToOne(targetEntity="User", inversedBy="groups")
* @JoinColumn(name="userId", referencedColumnName="id")
*/
protected $user;
/**
* @Id
* @ManyToOne(targetEntity="Group", inversedBy="users")
* @JoinColumn(name="groupId", referencedColumnName="id")
*/
protected $group;
/**
* @Column(type="integer")
*/
protected $relationship;
}
Связано -