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
сущности в отдельном запросе с использованием составного первичного ключа. Это не решение префекта, но оно работает под этими ограничениями. Совет: избегайте запроса связанных объектов как части цикла.