设置已过帐收集实体的订单

时间:2015-02-24 08:41:59

标签: symfony

我有两个实体,即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中存在相同的循环,它为已发布的缩放元素设置排序属性。

我该如何解决这个问题?

0 个答案:

没有答案