人们可以帮助我吗?我在 Doctrine 2.4 上持久化实体(Solicitud)时遇到了麻烦,当我将对象传递给实体管理器以进行持久化和刷新时,该实体的所有关联对象都已存储在其属性中。
完整描述的关系应该是......
- Usuario-> 关怀(一对多)
- Solicitud-> Servicios(多对多)
- 类别->服务(一对多)
我确实从我的 XML 映射中生成了实体和数据库结构......
在我的“solicitud”XML 中,我已经定义了如下所示的关系……当我执行命令时,中间表得到了有效的创建:
vendor\bin\doctrine orm:schema-tool:update --force
有两列,一切正常。
这是在定义多对多关系的字段上的“Solicitud”
<many-to-many field="servicios" target-entity="Servicio">
<cascade>
<cascade-persist/>
</cascade>
<join-table name="solicitud_servicio">
<join-columns>
<join-column name="id_solicitud" referenced-column-name="id"/>
</join-columns>
<inverse-join-columns>
<join-column name="id_servicio" referenced-column-name="id"/>
</inverse-join-columns>
</join-table>
这在 Servicio
<doctrine-mapping xmlns="http://doctrine-project.org..."
xmlns:xsi="http://www.w3.org/2001/XMLS..."
xsi:schemalocation="http://doctrine-project.org... http://doctrine-
project.org...">
<entity name="Servicio" table="servicio">
<indexes>
<index name="id_categoria" columns="id_categoria"/>
</indexes>
<id name="id" type="integer" column="id">
<generator strategy="IDENTITY"/>
</id>
<field name="codigo" type="string" column="codigo" length="15"
nullable="false"/>
<field name="nombre" type="string" column="nombre" length="70"
nullable="false"/>
<field name="detalle" type="string" column="detalle" length="250"
nullable="false"/>
<field name="precioPublico" type="integer" column="precio_publico"
nullable="false"/>
<field name="precioPrivado" type="integer" column="precio_privado"
nullable="false"/>
<field name="medida" type="string" column="medida" length="15"
nullable="false"/>
<field name="planificacion" type="integer" column="planificacion"
nullable="false"/>
<field name="fabricacion" type="integer" column="fabricacion"
nullable="false"/>
<field name="fechaCreacion" type="datetime" column="fecha_creacion"
nullable="true"/>
<field name="ultimaModificacion" type="datetime" column="ultima_modificacion"
nullable="false"/>
<many-to-one field="idCategoria" target-entity="Categoria">
<join-columns>
<join-column name="id_categoria" referenced-column-name="id"/>
</join-columns>
</many-to-one>
</entity>
</doctrine-mapping>
有什么我想念的吗?也许另一句话要求坚持另一个涉及/相关的类?
我正在尝试通过实体管理器句子中的“solicitud”实体来坚持...我将它们作为 DAO 分隔在不同的层上,但这没有问题,当数据到达这一层时,我尝试了 var_dump ,并且一切正常。
在我的“SolicitudService”中,我编写了这个函数来收集持久化所需的所有相关对象,我使用 VO(虚拟对象)和内部函数来构建从对象到 Json 或从 Json 到 Objects 和 toEntity 模式的数据(从 VO 到 Object所需的类)。
我在这个函数中做什么:
- 首先我在我的SolicitudServicioVO上找到我有的对象下面三句话尝试后,然后我创建了新的对象Solicitud。
- 然后我将通过 DAO 实体创建的对象设置为“Solicitud”新对象(“//set Solicitud Properties”注释后的 5 行)。
- 之后,我通过 listadoServicio 迭代($solicitudServicioVO->listadoServicio)(来自前端的服务列表),并为每个服务创建 VO,它们能够在接下来的句子中将自己构建为一个实体“或所需类型的类”,在这种情况下,是我在本问题开头的关系定义中提到的那些。
我派坚持,就这句话
$this->solicitudDAO->create($solicitud);
这导致了具有...的DAO
function create($solicitud){
$this->em->persist($solicitud);
$this->em->flush();
return $solicitud;
}
这个函数的名称可能更具描述性,可能将其称为 createSolicitud 作为其创建新函数的目的,但没关系......它还必须添加一个与用户相关的 Solicitud ......所以我坚持,现在没关系.
function addSolicitud($solicitudServicioVO){
try{
$usuario = $this->usuarioDAO->find($solicitudServicioVO->getIdUsuario()->id);
$direccion = $this->direccionDAO->find($solicitudServicioVO-
>getIdDireccion()->id);
$facturacion = $this->datoFacturacionDAO->find($solicitudServicioVO-
>getIdFacturacion()->id);
$solicitud = new Solicitud();
//set Solicitud Properties
$solicitud->setFechaCreacion(new DateTime());
$solicitud->setEstado("solicitado");
$solicitud->setIdFacturacion($facturacion);
$solicitud->setIdDireccion($direccion);
$solicitud->setIdUsuario($usuario);
foreach($solicitudServicioVO->listadoServicio as $servicioVO)
{
$categoriaServicioVO = $this->categoriaService->getCategoria($servicioVO-
>getCategoriaId());
$servicio = $servicioVO->toEntity();
$servicio->setIdCategoria($categoriaServicioVO->toEntity());
$solicitud->addServicio($servicio);
}
$resp = $this->solicitudDAO->create($solicitud);
$response = Utils::getInstancia()->httpResponseSuccess('001');
$response['data'] = $resp;
return $response;
}
catch(Exception $e){
$response = $e->getMessage();
}
}
所以,我是最具描述性的,我无法保留有关 SOlicitud 实体的这些数据......有人已经有类似的问题或任何额外的想法......也许在 XML 定义中?,它确实得到了通过实体作为注释,似乎没有任何问题。
请帮帮我,这种多对多的癌症已经花了将近一个星期没有解决jajaja