Symfony2 доктрина ORM составные первичные ключи

Я разрабатываю приложение, в Symfony 2.3 С доктрина 2.4 ОРМ. Компонент database engine, который я использую, -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

/**
 * @ORMId
 * @ORMManyToOne(targetEntity="TicketwayPruebaBundleEntityEstablecimientosSec")
 * @ORMJoinColumns(
 *      @ORMJoinColumn(name="id_establecimiento_sec", referencedColumnName="id_establecimiento_sec"),
 *      @ORMJoinColumn(name="id_establecimiento", referencedColumnName="id_establecimiento")) 
 */
private $establecimientoSec;

/ / Сущность / EstablecimientosSec

 /**
 * @ORMId
 * @ORMManyToOne(targetEntity="TicketwayPruebaBundleEntityEstablecimientos")
 * @ORMJoinColumn(name="id_establecimiento", referencedColumnName="id_establecimiento") 
 */
private $establecimiento;

при выполнении команды doctrine: mapping: import я получаю следующую ошибку

[DoctrineORMMappingMappingException] Невозможно сопоставить объект "EstablecimientoSec" с составным первичным ключом как часть первичного ключа другого объекта 'EstablecimientoSecPlano#idEstablecimiento'.

интересно, есть ли способ определить сущности в symfony, и я не могу сделать с доктриной.

могу ли я сопоставить функции по-другому, чтобы приложение работало правильно?

надеюсь, мой вопрос будет понят. спасибо

1 ответов


вы сталкиваетесь с этой проблемой, потому что ваш составной внешний ключ является составным первичным ключом другой таблицы. Это не очень хорошая практика развития, поэтому она просто не поддерживается доктриной, и я сильно сомневаюсь, что она когда-либо будет.

Решение 1 (предпочтительный):

добавьте один первичный ключ с автоматическим приращением в EstablecimientosSec. Затем вы можете связаться с этим EstablecimientosSec.id вместо.

решение 2:

Если изменение структуры базы данных абсолютно невозможно, не карта отношений. Вместо этого вы можете получить связанный EstablecimientosSec сущности в отдельном запросе с использованием составного первичного ключа. Это не решение префекта, но оно работает под этими ограничениями. Совет: избегайте запроса связанных объектов как части цикла.