symfony EasyAdminBundleにいくつかのカスタム アクションを追加しようとしています。フォーム ビューを問題なく追加しましたが、問題はこのフォーム POST アクションにあります。これは同じコントローラーの別のメソッドであり、うまく機能しますが、実行するpersist()
とflush()
エンティティマネージャーの場合、何もしません。これは私のコードです。変更がデータベースに適用されないことを除いて、すべてが期待どおりに機能します。
/**
* @Route("/product-segment/save/{id}", name="admin_product_segment_save")
*/
public function saveSegmentsAction($id)
{
$em = $this->getDoctrine()->getManager();
$product = $em->getRepository('AppBundle:product')->find($id);
foreach ($product->getSegments() as $segment)
{
error_log("Product has segment " . $segment->getId());
}
$product->removeAllSegments();
foreach ($product->getSegments() as $segment)
{
error_log("Now prod has " . $segment->getId());
}
$em->persist($product);
$em->flush();
foreach ($this->getRequest()->request->all() as $post_var => $segment_id)
{
if ($post_var == 'segment_id')
{
$segment = $em->getRepository('AppBundle:Segment')->find($segment_id);
$product->addSegment($segment);
}
}
$em->persist($product);
$em->flush();
// redirect to the 'list' view of the given entity
return $this->redirectToRoute('admin', array(
'view' => 'list',
'entity' => 'Product',
));
}
編集:これは私のエンティティ関係です
/**
* @ORM\ManyToMany(targetEntity="AppBundle\Entity\Segment", mappedBy="products", cascade={"all"})
* @ORM\JoinTable(
* joinColumns={@ORM\JoinColumn(onDelete="CASCADE")},
* inverseJoinColumns={@ORM\JoinColumn(onDelete="CASCADE")}
* )
*/
protected $segments;