【发布时间】:2018-02-08 18:40:13
【问题描述】:
人们可以帮助我吗?我在 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 到对象和 toEntity 模式的数据(来自VO 到所需类的对象)。
我在这个函数中做了什么:
- 首先我在我的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
【问题讨论】:
-
再一次,因为没有人回答,我已经解决了这个问题,将发布我在上面描述的上下文中建立的解决方案....更新故障状态jaja:
-
我会用里面的解决方案重写帖子,希望它不会被删除
标签: php doctrine many-to-many persistence xmlmapper