【问题标题】:Error with doctrine mapping import学说映射导入错误
【发布时间】:2018-02-16 16:40:30
【问题描述】:

我正在尝试导入已经为另一个项目(不是 symfony 项目)创建的数据库,所以我可以在 symfony 项目中使用它。

验证有效 php bin/控制台原则:架构:验证 [映射] OK - 映射文件正确。 [数据库] OK - 数据库架构与映射文件同步。

但是当我让php bin/console doctrine:mapping:import AppBundle annotation 它返回时

在 MappingException.php 第 588 行: 无法使用复合主映射实体“Tprovincia” 键作为另一个实体“Tlocalidad#paiscod”的主键的一部分。

这是对这些表的配置

CREATE TABLE tprovincia
(
  paiscod smallint NOT NULL, -- Código de país
  procod smallint NOT NULL, -- Código de provincia
  prodes character varying(100) NOT NULL, -- Nombre de provincia
  prodesamp character varying(250) NOT NULL, -- Descripción ampliada de provincia
  prousupro character varying(30) NOT NULL, -- Pro Usu Pro
  profecpro timestamp without time zone NOT NULL, -- Pro Fec Pro
  CONSTRAINT tprovincia_pkey PRIMARY KEY (paiscod, procod),
  CONSTRAINT itprovincia1 FOREIGN KEY (paiscod)
      REFERENCES tpais (paiscod) MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE NO ACTION
)
WITH (
  OIDS=FALSE
);

CREATE TABLE tlocalidad
(
  paiscod smallint NOT NULL, -- Código de país
  procod smallint NOT NULL, -- Código de provincia
  loccod integer NOT NULL, -- Código de localidad
  locdes character varying(100) NOT NULL, -- Descripción de localidad
  loccodpos character(8) NOT NULL, -- Código postal localidad
  locusupro character varying(30) NOT NULL, -- Loc Usu Pro
  locfecpro timestamp without time zone NOT NULL, -- Loc Fec Pro
  CONSTRAINT tlocalidad_pkey PRIMARY KEY (paiscod, procod, loccod),
  CONSTRAINT itlocalidad1 FOREIGN KEY (paiscod, procod)
      REFERENCES tprovincia (paiscod, procod) MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE NO ACTION
)
WITH (
  OIDS=FALSE
);

还有一点,数据库是一个 postgreSQL 数据库。 希望有人可以提供帮助。 谢谢!

【问题讨论】:

    标签: php postgresql symfony doctrine-orm


    【解决方案1】:

    问题是这里定义的复合主键:

    CONSTRAINT tprovincia_pkey PRIMARY KEY (paiscod, procod)
    

    这里:

    CONSTRAINT tlocalidad_pkey PRIMARY KEY (paiscod, procod, loccod)
    

    您可以做的是稍微修改您的数据库以使用更典型的单个 id 字段作为主键(您可以使用 UNIQUE 索引保留旧键以具有接近主键的内容)然后参考作为外键。

    【讨论】:

    • 我无法修改数据库
    • 在这种情况下,您可能无法让 Doctrine 管理关系。相反,您必须手动完成。基本上,不用定义@ORM\ManyToOne() 之类的关系,您只需定义列@Column(name="paiscod"),然后可能在您的自定义存储库类中处理它。
    猜你喜欢
    • 1970-01-01
    • 2013-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-07
    • 2016-08-07
    • 2012-06-18
    相关资源
    最近更新 更多