EC-CUBE4.0.2
受注情報 Order に紐づく Sender Entity を作成したのですが、受注の登録時にエラーになってしまいます。
Multiple non-persisted new entities were found through the given association graph:
* A new entity was found through the relationship 'Eccube\Entity\Order#Sender' that was not configured to cascade persist operations for entity: トエビス テスト. To solve this issue: Either explicitly call EntityManager#persist() on this unknown entity or configure cascade persist this association in the mapping for example @ManyToOne(..,cascade={"persist"}).
エラーの意味がわからずどうやったら解決できるかがわかりません。。
ソースを抜粋して記載します。
src/Eccube/Controller/Admin/Order/EditController.php
public function index(Request $request, $id = null, RouterInterface $router)
{
$TargetOrder = null;
$OriginOrder = null;
$Sender = null;
if (null === $id) {
// 空のエンティティを作成.
$TargetOrder = new Order();
$TargetOrder->addShipping((new Shipping())->setOrder($TargetOrder));
} else {
$TargetOrder = $this->orderRepository->find($id);
if (null === $TargetOrder) {
throw new NotFoundHttpException();
}
if ($Customer = $TargetOrder->getCustomer()) {
$Sender = $TargetOrder->getSender();
if (null === $Sender) {
$Sender = new Sender();
$TargetOrder->setSender($Sender);
$Sender->setCustomer($Customer);
}
}
}
if ($form->isSubmitted() && $form['OrderItems']->isValid()) {
// 登録ボタン押下
switch ($request->get('mode')) {
case 'register':
if (!$flowResult->hasError() && $form->isValid()) {
$this->entityManager->persist($TargetOrder);
$this->entityManager->flush(); // ★ ここでエラー発生
if ($Customer = $TargetOrder->getCustomer()) {
if ($Sender) {
$this->entityManager->persist($Sender);
$this->entityManager->flush();
}
}
return $this->redirectToRoute('admin_order_edit', ['id' => $TargetOrder->getId()]);
}
break;
}
}
return [
'form' => $form->createView(),
'searchCustomerModalForm' => $searchCustomerModalForm->createView(),
'searchProductModalForm' => $searchProductModalForm->createView(),
'Order' => $TargetOrder,
'id' => $id,
'shippingDeliveryTimes' => $this->serializer->serialize($times, 'json'),
];
}
src/Eccube/Form/Type/Admin/OrderType.php
$Order = $options['data'];
$Customer = $Order->getCustomer();
if ($Customer) {
$Sender = $this->senderRepository->findOneBy(['Customer' => $Customer]);
$builder
->add('Sender', SenderType::class, [
'data' => $Sender,
])
;
}
----------------
EC-CUBE 《プラチナ》ランクパートナー
トエビス株式会社 田中 宏典
EC-CUBEの機能やデザインのカスタマイズ承ります。