教义.缓存.实体关系



我有两个实体公司存储具有一到一对的双向关系。实体及其关系被缓存(学说第二层缓存(。问题是,当我创建一个新的存储实体时,公司Storages Collection直到我手动清除缓存之前才有这个新实体。

 AppBundleEntityMainCompany:
    type: entity
    table: main.company
    cache:
        usage: NONSTRICT_READ_WRITE
    id:
        id:
            type: integer
            nullable: false
            id: true
            generator:
                strategy: IDENTITY
    fields:
        legalName:
            type: string
            nullable: false
            length: 255
            options:
                fixed: false
            column: legal_name
   oneToMany:
      storages:
          targetEntity: AppBundleEntityMainStorage
          mappedBy: company
          cascade: ["all"]
          orphanRemoval: true
          cache:
              usage: NONSTRICT_READ_WRITE

AppBundleEntityMainStorage:
    type: entity
    table: main.storage
    cache:
        usage: NONSTRICT_READ_WRITE
    id:
        id:
            type: integer
            nullable: false
            options:
                unsigned: false
            id: true
            generator:
                strategy: IDENTITY
    fields:
        storageName:
            type: string
            nullable: true
            length: 255
            options:
                fixed: false
            column: storage_name
    manyToOne:
        company:
            targetEntity: AppBundleEntityMainCompany
            cascade: ["all"]
            fetch: LAZY
            mappedBy: null
            inversedBy: storages
            joinColumns:
                company_id:
                    referencedColumnName: id
            orphanRemoval: false
            cache:
                usage: NONSTRICT_READ_WRITE

这是创建存储的动作。没有什么不寻常的。

public function addAction(Request $request)
{
    $form = $this->createForm(StorageAddType::class, null);
    $form->handleRequest($request);
    if (!$form->isSubmitted()) {
        throw new RuntimeException('Некорректный запрос');
    }
    if (!$form->isValid()) {
        throw new SymfonyComponentValidatorExceptionValidatorException((string)$form->getErrors(true));
    }
    $doctrine = $this->getDoctrine();
    /**
     * @var Storage $storage
     */
    $storage = $form->getData();

    $manager = $doctrine->getManager();
    $manager->persist($storage);
    $manager->flush();
    return $this->createAjaxDataResponse($this->createSuccessMessage('Storage successfully added'));
}

只有当我尝试创建新实体(存储(时,才会观察这种行为。然后在更新/删除操作上 - storages Company 的集合已更新。

您对持久数据显然是错误的。您尝试通过管理器将未序列化的对象从形式持续到UKNOWN存储库。

尝试以下操作:

public function addAction(Request $request)
{
    $form = $this->createForm(StorageAddType::class, null);
    $form->handleRequest($request);
    $em = $this->getDoctrine()->getManager();
    if($form->isSubmitted() && $form->isValid())
    {
        $storage = new Storage();
        $storage->setVal1($form->get('Val1'));
        $storage->setVal2($form->get('Val2'));
        $em->persist($storage);
        $em->flush();
        return $this->createAjaxDataResponse($this->createSuccessMessage('Storage successfully added'));
    }
    return $this->render('YOUR_TWIG_LAYOUT', [
        'form' => $form->createView()
    ]);
}

如果通过将数据序列化为实体,则可以尝试持续整个对象。写入setValsFromForm($data)之类的方法,并从$数据表格中序列化vars。然后更改以下行:

$storage->setVal1($form->get('Val1')); $storage->setVal2($form->get('Val2'));

进入

$storage->setValsFromForm($form->getData());

也:异常和表单验证应通过表单类中的表单验证器来处理,而不是在控制器中。例外是当您通过控制器中的FormBuilderInterface创建表单时,但是您在此处添加逻辑,而不是外部$ form类。

最新更新