Tôi đang phát triển một ứng dụng trong Symfony 2.3 với Doctrine 2.4 như ORM. Công cụ cơ sở dữ liệu tôi sử dụng là PostgreSQL. Tôi gặp sự cố khi ánh xạ các đối tượng có khóa chính kết hợp trong các bảng khác. Các phím này là các khóa lạ trong khóa liên quan.Symfony2 Doctrine ORM Composite Primary Keys
Các bảng trong cơ sở dữ liệu của tôi có cấu trúc sau
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
);
Xác định thực thể establecimientoSecPlano, biến $ establecimientoSec chứa các phím $ establecimiento và $ 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;
// Pháp nhân/EstablecimientosSec
/**
* @ORM\Id
* @ORM\ManyToOne(targetEntity="Ticketway\PruebaBundle\Entity\Establecimientos")
* @ORM\JoinColumn(name="id_establecimiento", referencedColumnName="id_establecimiento")
*/
private $establecimiento;
Khi thực hiện học thuyết lệnh: lập bản đồ: import tôi nhận được lỗi sau
[Học thuyết \ ORM \ Mapping \ MappingException] Không thể để lập bản đồ thực thể 'EstablecimientoSec' với một khóa chính tổng hợp như một phần của khóa chính của một thực thể khác 'EstablecimientoSecPlano # idEstablecimiento'.
Tôi tự hỏi nếu có cách nào để xác định các thực thể trong symfony và tôi không thể làm với học thuyết.
Tôi có thể ánh xạ các đối tượng địa lý theo cách khác để ứng dụng hoạt động chính xác không?
Tôi hy vọng câu hỏi của tôi được hiểu. cảm ơn
Bất kỳ tỷ lệ cược nào đều hữu ích? http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/tutorials/composite-primary-keys.html –
thăm dò giải pháp đó nhưng không thành công, cảm ơn anyway @Denis – Guillermo
Bạn * có thể * làm việc xung quanh điều này bằng cách gán ID đơn cột độc lập, được tạo tự động cho tất cả các bảng và sử dụng 'id_establecimiento_sec_plano',' id_establecimiento_sec' và 'id_establecimiento' làm trường. (bạn không cần phải có cùng một trường trong nhiều bảng/thực thể khi bạn có thể truy cập các trường đó bằng cách sử dụng quan hệ). I E.* if * Tôi hiểu vấn đề của bạn một cách chính xác. – schemar