Tôi có một bảng tham gia được tạo bằng cách sử dụng chú thích @ORM\ManyToMany
trong Symfony2/Doctrine. Nó tham gia Category
và Parameter
bảng.Làm thế nào để xóa các hàng khỏi bảng nối (ManyToMany) trong Doctrine?
Bây giờ tôi muốn xóa tất cả các tham số khỏi bảng Tham số. Bởi vì có những ràng buộc khóa ngoài được xác định trên bảng kết nối, tôi không thể chỉ xóa các hàng khỏi bảng Tham số. Trước tiên, tôi phải xóa các hàng con khỏi bảng tham gia. Tuy nhiên, cú pháp DQL của Dotrine yêu cầu cung cấp tên của thực thể, như:
DELETE Project\Entity\EntityName
Nhưng tên của thực thể kết hợp được tạo ra bằng cách sử dụng tổ hợp ManyToMany là gì? Làm thế nào để đối phó với nó?
Cách khác, làm cách nào tôi có thể đặt CẬP NHẬT CÂU HỎI THƯỜNG GẶP và TRÊN DELETE CASCADE trên các ràng buộc khóa ngoài trong bảng nối được xác định bởi chú thích @ORM\ManyToMany
.
EDIT:
schema tham gia bàn:
CREATE TABLE `categories_params` (
`category_id` INT(11) NOT NULL,
`param_id` INT(11) NOT NULL,
PRIMARY KEY (`category_id`, `param_id`),
INDEX `IDX_87A730CB12469DE2` (`category_id`),
INDEX `IDX_87A730CB5647C863` (`param_id`),
CONSTRAINT `categories_params_ibfk_1` FOREIGN KEY (`category_id`) REFERENCES `allegro_category` (`id`),
CONSTRAINT `categories_params_ibfk_2` FOREIGN KEY (`param_id`) REFERENCES `category_param` (`id`)
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB;
on UPDATE
và on DELETE
theo mặc định được thiết lập để RESTRICT
giải pháp cuối cùng sẽ là:
* @ORM\ManyToMany(targetEntity="CategoryParam", cascade={"persist","remove"})
* @ORM\JoinTable(name="categories_params",
* joinColumns={@ORM\JoinColumn(name="category_id", referencedColumnName="id", onDelete="CASCADE")},
* inverseJoinColumns={@ORM\JoinColumn(name="param_id", referencedColumnName="id", onDelete="CASCADE")})
Bạn có thể đăng các schema bảng? Tôi nghi ngờ bạn có một ràng buộc FK trên bảng kết nối để loại bỏ các hàng nếu bất kỳ hàng nào bị xóa khỏi bảng Danh mục hoặc Tham số. Nếu đây là trường hợp, tất cả những gì bạn phải làm là xóa khỏi bảng Tham số và MySQL sẽ xử lý phần còn lại cho bạn. –
Thực ra ràng buộc FK trong bảng nối của tôi ngăn chặn xóa các hàng khỏi bảng cha (Tham số) nếu chúng được tham chiếu bởi bảng nối. Tôi có thể thay đổi ràng buộc này trong lược đồ db, nhưng tôi muốn làm điều đó bằng cách sử dụng chú thích của Doctrine (để có thể tạo ra lược đồ đầy đủ từ mã mà không cần chỉnh sửa cơ sở dữ liệu theo cách thủ công). – JohnM2
Bạn có nhớ đăng lược đồ không? Tôi quan tâm để xem việc xử lý FK được thực hiện ở lớp ứng dụng thông qua Doctrine hay Doctrine chỉ trừu tượng hóa những gì MySQL đã làm. –