Doctrine

时间:2017-12-09 16:48:40

标签: php mongodb symfony doctrine

最近几天我一直忙着使用Doctrine和MongoDB制作表单。公司应该能够通过使用此表格在特定事件中预订桌子,椅子......下面的代码段显示了此表单的控制器。

'ObjectMap'对象将某个对象的数量映射到对象本身。控制器创建所有'ObjectMap'对象,并将它们添加到公司对象。但是,'ObjectMap'对象由Doctrine持久化(它们显示在数据库中),但公司对象根本没有修改,MongoDB没有发出数据库请求。 persist()函数似乎根本没有效果。

public function logisticsAction(Company $company)
{
    $form = $this->createForm(new LogisticsForm($this->getDoctrine()->getManager()), $company);

    if ($this->getRequest()->isMethod('POST')) {
        $form->bind($this->getRequest());
        if ($form->isValid()) {
            $formData = $this->getRequest()->request->get('_company_logistics_edit');
            $objects = $this->getDoctrine()->getManager()
                ->getRepository('Jobfair\AppBundle\Document\Company\Logistics\Object')
                ->findAll();

            foreach($objects as $object) {
                $requirement = $formData['objectRequirement_'.$object->getId()];

                $map = new ObjectMap($requirement, $object);
                $this->getDoctrine()->getManager()->persist($map);

                $company->addObjectMap($map);
                //print_r($company->getObjectMaps());
            }
            $this->getDoctrine()->getManager()->persist($company);
            $this->getDoctrine()->getManager()->flush();

            $this->getRequest()->getSession()->getFlashBag()->add(
                'success',
                'The information was successfully updated!'
            );

            return $this->redirect(
                $this->generateUrl(
                    '_company_settings_logistics',
                    array(
                        'company' => $company->getId(),
                    )
                )
            );
        }
    }

公司对象在此处定义:

class Company{
/**
 * @ODM\Id
 */
private $id;

/*
 * @ODM\ReferenceMany(targetDocument="Jobfair\AppBundle\Document\Company\Logistics\ObjectMap", cascade={"persist", "remove"})
 */
private $objectMaps;

public function __construct($name = null, $description = null)
{
    $this->objectMaps = new ArrayCollection();
}

public function getId()
{
    return $this->id;
}

public function getObjectMaps()
{
    return $this->objectMaps;
}

public function getObjectsArray()
{
    $objects = array();
    foreach($this->objectMaps as $map)
        $objects[] = array(
            'name' => $map->getObject()->getName(),
            'amount' => $map->getRequirement()
            );
    return $objects;
}

public function addObjectMap(ObjectMapDocument $objectMap)
{
    $this->objectMaps[] = $objectMap;
}

public function removeObject(ObjectMapDocument $objectMap)
{
    $this->objectMaps->removeElement($objectMap);
}

}

0 个答案:

没有答案