我正在使用Symfony 2.3和Doctrine 2.4作为ORM开发应用程序。我使用的数据库引擎是PostgreSQL。当在其他表中映射具有组合主键的实体时,我遇到了问题。这些键是相关键中的外键。
我的数据库中的表具有以下结构
CREATE TABLE public.establecimiento
(
id_establecimiento integer NOT NULL,
establecimiento character varying(100) NOT NULL,
CONSTRAINT pk_establecimiento PRIMARY KEY (id_establecimiento )
)
WITH (
OIDS=FALSE
);
CREATE TABLE public.establecimiento_sec
(
id_establecimiento_sec integer NOT NULL,
id_establecimiento integer NOT NULL,
det_seccion character varying(40) NOT NULL,
plano character varying(100),
sector_ingreso character varying(254),
sponsor_imagen_sec character varying(96000),
CONSTRAINT pk_establecimientos_sec PRIMARY KEY (id_establecimiento_sec , id_establecimiento ),
CONSTRAINT fk_establec_reference_establec FOREIGN KEY (id_establecimiento)
REFERENCES public.establecimiento (id_establecimiento) MATCH SIMPLE
ON UPDATE RESTRICT ON DELETE RESTRICT
)
WITH (
OIDS=TRUE
);
CREATE TABLE public.establecimiento_sec_plano
(
id_establecimiento_sec_plano integer NOT NULL,
id_establecimiento_sec integer NOT NULL,
id_establecimiento integer NOT NULL,
det_plano character varying(512),
cantidad integer NOT NULL,
precio double precision,
insert_charge double precision DEFAULT 0,
descr character varying(254),
CONSTRAINT pk_establecimiento_sec_plano PRIMARY KEY (id_establecimiento_sec_plano , id_establecimiento_sec , id_establecimiento ),
CONSTRAINT fk_establecimiento_sec FOREIGN KEY (id_establecimiento, id_establecimiento_sec)
REFERENCES public.establecimiento_sec (id_establecimiento, id_establecimiento_sec) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE CASCADE
)
WITH (
OIDS=FALSE
);
定义实体establecimientoSecPlano,$establecimientoSec变量包含键$establecimiento和$id_establecimiento_sec。
//实体/EstablecimientosSecPlano
/**
* @ORM\Id
* @ORM\ManyToOne(targetEntity="Ticketway\PruebaBundle\Entity\EstablecimientosSec")
* @ORM\JoinColumns(
* @ORM\JoinColumn(name="id_establecimiento_sec", referencedColumnName="id_establecimiento_sec"),
* @ORM\JoinColumn(name="id_establecimiento", referencedColumnName="id_establecimiento"))
*/
private $establecimientoSec;
//实体/机构部门
/**
* @ORM\Id
* @ORM\ManyToOne(targetEntity="Ticketway\PruebaBundle\Entity\Establecimientos")
* @ORM\JoinColumn(name="id_establecimiento", referencedColumnName="id_establecimiento")
*/
private $establecimiento;
执行命令doctrine:mapping:import时,我遇到了以下错误:
[Doctrine\ORM\Mapping\MappingException]无法将实体“EstablecimientoSec”映射为另一个实体“EstablecimientoSecPlano#idEstablecimiento”的复合主键的一部分。
我想知道在Symfony中是否有定义实体的其他方法,而不是使用Doctrine。是否可以以其他方式映射功能以使应用程序正常工作?
希望我的问题能够被理解。谢谢。
id_establecimiento_sec_plano
、id_establecimiento_sec
和id_establecimiento
作为字段来解决此问题(您不需要在多个表/实体中拥有相同的字段,因为您可以使用关系访问它们)。如果我正确理解了您的问题的话。 - schemar