Ich entwickle eine Anwendung in Symfony 2.3 mit Lehre 2.4 als ORM. Die Datenbank-Engine, die ich verwende, ist PostgreSQL. Ich habe Probleme beim Zuordnen von Entitäten mit zusammengesetzten Primärschlüsseln in anderen Tabellen. Diese Schlüssel sind Fremdschlüssel im zugehörigen Schlüssel.Symfony2 Doctrine ORM Composite Primärschlüssel
Die Tabellen in meiner Datenbank
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
);
Definition der Entität establecimientoSecPlano, $ establecimientoSec Variable die Schlüssel $ establecimiento und $ 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;
enthält die folgende Struktur aufweisen
// Entität/EstablecimientosSec
/**
* @ORM\Id
* @ORM\ManyToOne(targetEntity="Ticketway\PruebaBundle\Entity\Establecimientos")
* @ORM\JoinColumn(name="id_establecimiento", referencedColumnName="id_establecimiento")
*/
private $establecimiento;
Wenn die Lehre Befehl ausführen: Mapping: import Ich erhalte den Fehler folgenden
[Lehre \ ORM \ Mapping \ MappingException] Es ist nicht möglich Einheit ‚EstablecimientoSec‘ mit einem zusammengesetzten Primärschlüssel kartieren Teil des Primärschlüssels einer anderen Entität "EstablecimientoSecPlano # idEstablecimiento".
Ich frage mich, ob es eine Möglichkeit gibt, die Entitäten in symfony zu definieren, und ich kann nicht mit der Lehre tun.
Kann ich die Funktionen auf andere Weise zuordnen, damit die Anwendung ordnungsgemäß funktioniert?
Ich hoffe meine Frage wird verstanden. Danke
Alle Chancen, die das hilft? http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/tutorials/composite-primary-keys.html –
Sonde diese Lösung aber ohne Erfolg, danke trotzdem @Denis – Guillermo
Sie * könnte * umgehen Dazu werden unabhängige, automatisch generierte, einspaltige IDs für alle Tabellen zugewiesen und 'id_establecimiento_sec_plano', 'id_establecimiento_sec' und 'id_establecimiento' als Felder verwendet. (Sie müssen nicht dasselbe Feld in mehreren Tabellen/Entitäten haben, da Sie über die Relation auf diese zugreifen können). I.e.* Wenn * Ich verstehe dein Problem richtig. – schemar