Tworzę aplikację w Symfony 2.3 z Doctrine 2.4 jako ORM. Używany silnik bazy danych to PostgreSQL. Występują problemy podczas mapowania elementów z złożonymi kluczami podstawowymi w innych tabelach. Te klawisze są obcymi klawiszami w odpowiednim kluczu.Symfony2 Doctrine ORM Composite Primary Keys
tabele w mojej bazy danych mają następującą strukturę
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
);
definiowania podmiotu establecimientoSecPlano, zmienna $ establecimientoSec zawierający klucze $ Establecimiento i $ id_establecimiento_sec
// Entity/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;
// Entity/EstablecimientosSec
/**
* @ORM\Id
* @ORM\ManyToOne(targetEntity="Ticketway\PruebaBundle\Entity\Establecimientos")
* @ORM\JoinColumn(name="id_establecimiento", referencedColumnName="id_establecimiento")
*/
private $establecimiento;
Podczas wykonywania doktrynę polecenia: mapowania: import otrzymuję następujący błąd
[Doctrine \ ORM \ Mapowanie \ MappingException] Nie można mapować podmiot „EstablecimientoSec” z kompozytu klucza podstawowego jako część klucza podstawowego innej jednostki "EstablecimientoSecPlano # idEstablecimiento".
Zastanawiam się, czy istnieje jakiś sposób zdefiniowania podmiotów w symfony i nie mogę zrobić z doktryną.
Czy mogę odwzorować funkcje w inny sposób, aby aplikacja działała poprawnie?
Mam nadzieję, że moje pytanie zostanie zrozumiane. dzięki
Jakieś szanse na to? http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/tutorials/composite-primary-keys.html –
sonda to rozwiązanie, ale bez powodzenia, dzięki i tak @Denis – Guillermo
You * could * work around to przez przypisanie niezależnych, generowanych automatycznie, jedno-kolumnowych identyfikatorów dla wszystkich tabel i użycie 'id_establecimiento_sec_plano',' id_establecimiento_sec' oraz 'id_establecimiento' jako pól. (nie musisz mieć tego samego pola w wielu tabelach/obiektach, ponieważ możesz uzyskać dostęp do tych, którzy używają relacji). To znaczy.* jeśli * prawidłowo rozumiem Twój problem. – schemar