Здравствуйте. Есть у меня один проект написанный на чистом PHP.
Я в нем создаю сущность Company с помощью хендлера (ну моя реализация CommandBus). У каждой компании есть услуги, которые она оказывает - массив
company_services
. Встал вопрос о подключении ко всему этому Symfony. Но ок - коммандбас связал с Messenger, value object сделал с помощью Embeddable, остался вопрос, как добавить услуги компании в репозиторий.
/**
* @ORM\Entity(repositoryClass=CompanyRepository::class)
* @Table(name="company")
*/
final class Company {
/**
* @Embedded(class = "Id",columnPrefix=false)
*/
private Id $id;
/**
* @Embedded(class = "Inn",columnPrefix=false)
*/
private Inn $inn;
/**
/**
* @ORM\OneToMany(targetEntity="App\Company\Domain\Entity\CompanyServices", mappedBy="company")
* @Assert\NotNull
*/
private array $company_services;
public function __construct(
Id $id,
Inn $inn,
Address $address,
array $company_services,
DateTimeImmutable $date
)
}
И так мне нужно сохранить это в хендлере
public function __invoke(CommandInterface $command): void
{
$company = new Company(
$id = Id::next(),
new Inn($command->getInn()),
new Address(
...
),
$command->getCompanyServices(),
$date = new DateTimeImmutable()
);
$this->repository->add($company);
}
}
Company сохраняется, всё ок. Но мне нужно еще сохранить массив $company_services как связанную сущность. На чистом php всё понятно - я в репозитории просто с PDO сохраняю в цикле, а вот с симфони не очень. В
документации используются сеттеры и потом всё сохраняется flush(). Но у меня нет сеттеров, у меня конструкторы. Я могу создать в Company что-то вроде сеттера
public function addCompanyServices($services) {}
Но что с ним делать дальше?
Как понимаю, в симфони по феншую - это создать entity CompanyService, к ней, соответственно, репозиторий, но и как это всё сохранить без сеттеров в CompanyService и из хендлера?
Ну не понимаю я документации.