Я использую API-платформу для доставки контента через API.У меня есть Потенциальные отношения между пользователями и участниками (не у всех пользователей будут участники, но у всех участников будет хотя бы один пользователь).Моя главная цель - встроить пользовательские данные отношения в результирующий набор участников, поскольку этот результат будет использоваться таблицей данных, и было бы более эффективно, чтобы эти данные уже присутствовали в результате, а не выполнять дополнительный запрос данных..
Например:
{
"@context": "/api/contexts/Participants",
"@id": "/api/participants",
"@type": "hydra:Collection",
"hydra:member": [
{
"@id": "/api/participants/1",
"@type": "Participants",
"id": 1,
"name": "Jeffrey Jones",
"users": [
{
"@id": "/api/users/1",
"@type": "User",
"name": "Jenny Jones"
},
{
"@id": "/api/users/2",
"@type": "User",
"name": "Jessie Jones"
}
]
}
],
"hydra:totalItems": 1
}
Однако я не уверен, возможно ли это.Я посмотрел на https://api -platform.com / docs / core / serialization # embedding-Relations , но я не уверен, что это сработает для нескольких наборов результатов, так как пример - одна книга для одного автора.Тем не менее, мой сценарий - один участник для нескольких пользователей.
Также (и мне, возможно, понадобится перейти к более прямому подходу), я использую соединительную таблицу, чтобы я мог назначить дополнительные метаданные дляотношения.Итак ... участники> объединенная таблица (содержащая дополнительные данные)> пользователи (и наоборот).Опять же, мне может понадобиться рассмотреть прямую связь между участниками и пользователями, а затем использовать таблицу ParticipantUserMeta для хранения дополнительных метаданных.Однако в данный момент я склоняюсь к таблице соединений, содержащей ассоциацию, а также дополнительные метаданные.
Вот основы моих сущностей (большинство ненужных данных опущено):
Пользователь:
/**
* @ApiResource
* ...
*/
class User implements UserInterface, \Serializable
{
/**
* @var int
*
* @ORM\Id
* @ORM\GeneratedValue
* @ORM\Column(type="integer")
*/
private $id;
/**
* @var string
* @ORM\Column(type="string")
* @Assert\NotBlank()
*/
private $name = '';
/**
* @ORM\OneToMany(targetEntity="App\Entity\ParticipantRel", mappedBy="user")
*/
private $participants;
public function __construct()
{
$this->participants = new ArrayCollection();
}
public function getId(): int
{
return $this->id;
}
public function getName(): string
{
return $this->name;
}
/**
* @return Collection|ParticipantRel[]
*/
public function getParticipants(): Collection
{
return $this->participants;
}
}
ParticipantRel:
/**
* @ApiResource
* ...
*/
class ParticipantRel
{
/**
* @var int The Participant Id
*
* @ORM\Id
* @ORM\GeneratedValue
* @ORM\Column(type="integer")
*/
private $id;
/**
* @var int
*
* @ORM\Column(type="boolean")
*/
private $primary_contact;
/**
* @var string Relationship notes
*
* @ORM\Column(type="text", nullable=true)
*/
private $notes;
/**
* @ORM\ManyToOne(targetEntity="App\Entity\Participants", inversedBy="users")
* @ORM\JoinColumn(nullable=false)
*/
private $participant;
/**
* @ORM\ManyToOne(targetEntity="App\Entity\User", inversedBy="participants")
* @ORM\JoinColumn(nullable=false)
*/
private $user;
public function getId (): int
{
return $this->id;
}
public function getPrimaryContact(): ?bool
{
return $this->primary_contact;
}
public function getNotes(): ?string
{
return $this->notes;
}
public function getParticipant(): ?Participants
{
return $this->participant;
}
public function getUser(): ?User
{
return $this->user;
}
}
Участники
/**
* @ApiResource
* ...
*/
class Participants
{
/**
* @var int The Participant Id
*
* @ORM\Id
* @ORM\GeneratedValue
* @ORM\Column(type="integer")
*/
private $id;
/**
* @var string Participant's first name
*
* @ORM\Column(name="name")
* @Assert\NotBlank
*/
public $name;
/**
* @ORM\OneToMany(targetEntity="App\Entity\ParticipantRel", mappedBy="participant")
*/
private $users;
public function __construct() {
$this->users = new ArrayCollection();
}
public function getId (): int
{
return $this->id;
}
public function getName(): ?string
{
return $this->name;
}
/**
* @return Collection|ParticipantRel[]
*/
public function getUsers(): Collection
{
return $this->users;
}
}
Мой вопрос: возможно ли то, что я пытаюсь сделать внутри организации, и если да, то чтоя скучаю?Я много исследовал это, прежде чем приехать сюда, но не нашел никакого решения, так как большинство решений, которые я вижу, включают в себя Twig tpl, но я просто отправляю данные через api-платформу.Любое положительное направление будет с благодарностью.