防止刷新映射数据

问题描述 投票:0回答:1

我想知道是否有可能排除某些表单字段持久/刷新到数据库(但继续拥有

'mapped' => true
)。

我想实现用户添加一行(

Device
)及其规格但具有多个序列号的效果,并在提交后将其拆分并保留

问题是表单数据,因为当我将数据映射到 from 时,调用

$em->flush()
会将所有映射数据保存到表单中,因此将所有粘贴的
serialnubmers
作为一台设备。 (在下面的这个特定代码中,它将保留所有 SN 作为单独的设备 + N 设备与所有 sn-s)


$data = $deviceAddForm->getData();
foreach ($data['devices'] as $key => $device) {
    $device->setAgreement($a);
    $snList = array_filter(preg_split('/[\s,~]+/', $device->getSerialNumber()), 'strlen');
    if($device->isAccessory() != true){
        foreach ($snList as $key => $sn) {
            $d = new Device();
            $d->setAgreement($a);
            $d->setSerialNumber($sn);
            $d->setQuantity(1);
            $d->setAccessory(false);

            $d->setName($device->getName());
            $d->setPartNumber($device->getPartnumber());
            $d->setModyfications($device->getModyfications());
            $d->setWarrantyEnds($device->getWarrantyEnds());
            $d->setSla($device->getSla());
            $d->setDeviceCategory($device->getDeviceCategory());
            $em->persist($d);
        }
    } else {
        $em->persist($device);
    }


}
$em->flush() 

$em->flush() 刷新数组 $data['devices'] 中的附加设备。

我想在某种程度上防止 $data['devices'] 刷新,但表单中仍然有映射的

devices
字段。

刷新每个

$d
的想法会显着减慢陶氏速度,因为有多个数据库调用

symfony symfony-forms
1个回答
0
投票

您希望分离原始设备,以便它不会立即保留,您可以在 Doctrine 文档中阅读更多相关信息:https://www.doctrine-project.org/projects/doctrine-orm/en/3.3/参考/working-with-objects.html#detaching-entities

分离意味着您所做的任何更改都不再自动保留到数据库中。

$data = $deviceAddForm->getData();
foreach ($data['devices'] as $key => $device) {

$device->setAgreement($a);

$em->detach($device);
$snList = array_filter(preg_split('/[\s,~]+/', $device->getSerialNumber()), 'strlen');
//etc.
© www.soinside.com 2019 - 2024. All rights reserved.