我有两个实体,即scale和scale元素。这些可以在OneToMany关系中使用。 scale元素有一个名为" sorting"的属性。在本专栏中,我将保存订单。
我还创建了一个带有ScaleElements集合的表单ScaleType。我可以使用jquery sortable对scale元素进行排序,并发布已排序的元素。在我发布表单后,我将按照发布的顺序获取比例元素以保存"排序"柱。
我处理此问题的编辑操作如下:
public function editAction($id, Request $request)
{
$em = $this->getDoctrine()->getManager();
$scale = $em->getRepository('AppMyBundle:Scale')->find($id);
if (!$scale) {
$this->get('session')->getFlashBag()->add('danger', $this->get('translator')->trans('not found'));
return $this->redirect($this->generateUrl('scale_list'));
}
// Create an ArrayCollection of the current Scaleitems objects in the database
$originalScaleElements = new ArrayCollection();
foreach ($scale->getElements() as $element) {
$originalScaleElements->add($element);
}
$form = $this->createForm($this->get('form.type.scale'), $scale);
$form->handleRequest($request);
if ($form->isValid()) {
// remove the relationship between the scale and the elements
foreach ($originalScaleElements as $element) {
if (false === $scale->getElements()->contains($element)) {
$element->setScale(null);
$em->persist($element);
$em->remove($element);
}
}
// Get elements
$scaleElements = $scale->getElements();
// Init counter
$counter = 1;
foreach ($scaleElements as $element) {
$element->setSorting($itemCounter);
$element->setScale($scale);
$em->persist($element);
$counter++;
}
$em->persist($scale);
$em->flush();
$this->get('session')->getFlashBag()->add('info', $this->get('translator')->trans('object edited', array()));
return $this->redirect($this->generateUrl('scale_list'));
}
return $this->render('AppMyBundle:Scale:edit.html.twig', array("form" => $form->createView()));
}
但排序属性不会从比例元素更改。它具有在add动作中设置的初始状态。在add action中存在相同的循环,它为已发布的缩放元素设置排序属性。
我该如何解决这个问题?