Я бы предположил, что PaymentManager
, как предлагает @Inori, - лучший путь, это СУХОЙ, а также центральная точка, где создаются сущности. Это позволяет вам упорядочить весь пользовательский ввод в контроллере и затем передать его менеджеру, чтобы правильно построить объект Sale
.
Если вы действительно хотите воспользоваться опцией 1st и использовать обратный вызов жизненного цикла, я предполагаю, что вы получаете исключение, в котором говорится, что неуправляемая сущность была обнаружена в другой сущности - или что-то в этом роде. Чтобы обойти это, вы можете использовать каскадное сохранение на вашем отображении, что означает, что вам не нужно звонить persist
для Payment
:
/**
* One-to-Many via Join Table (aka One-To-Many Unidirectional).
* @ORM\ManyToMany(targetEntity="Payment", cascade={"persist"})
* @ORM\JoinTable(
* inverseJoinColumns={
* @ORM\JoinColumn(unique=true, onDelete="CASCADE")
* }
* )
*/
Вы можете узнать больше о One-To-One, однонаправленном , если вас это смущает.
Также вам следует прочитать о каскадном сохранении Переходное сохранение / каскадные операции .