Câu hỏi đặt ra là về Doctirne nhưng tôi nghĩ rằng có thể được mở rộng cho nhiều ORM.Tại sao có nhu cầu tách và hợp nhất các thực thể trong ORM?
Detach:
Một thực thể được tách ra từ một EntityManager và do đó không còn được quản lý bằng cách gọi phương pháp
EntityManager#detach($entity)
vào nó hoặc bằng tầng hoạt động Mở cửa sổ mới với nó. Các thay đổi được thực hiện cho thực thể tách rời , nếu có (bao gồm xóa đối tượng), sẽ không được đồng bộ hóa với cơ sở dữ liệu sau khi thực thể được tách ra.
Merge:
đơn vị sáp nhập liên quan đến việc sáp nhập các đơn vị (thường tách ra) vào bối cảnh của một EntityManager để họ trở thành quản lý một lần nữa. Để hợp nhất trạng thái của một thực thể thành một EntityManager, hãy sử dụng phương thức
EntityManager#merge($entity)
. Trạng thái của thực thể đã qua sẽ được hợp nhất thành bản sao được quản lý của đối tượng này và bản sao này sẽ sau đó sẽ được trả lại.
Tôi hiểu (gần như) cách thức này hoạt động, nhưng câu hỏi đặt ra là: tại sao người ta cần tách ra/sáp nhập entitiies? Bạn có thể cho tôi một ví dụ/kịch bản khi hai hoạt động này có thể được sử dụng/cần thiết không?
Tôi đồng ý với tất cả nói ngoại trừ những gì được nói về tuôn ra. Phương thức tuôn ra đồng bộ hóa các thực thể với cơ sở dữ liệu nhưng bên trong các ranh giới giao dịch. Điều này xuất phát khi gọi một truy vấn trong cùng một giao dịch. Vì vậy, bạn kiểm dịch rằng việc xử lý truy vấn sẽ tính đến các cập nhật giao dịch rất này. – Sam
Bạn là đúng @Sam, tôi đã sai với phương pháp tuôn ra. – manix
Đây là một lời giải thích tốt (+1), nhưng tại sao một người nên sử dụng nhiều hơn một người quản lý thực thể ngay từ đầu? Không thể lấy nó, xin lỗi, sử dụng Doctrine luôn với một trình quản lý thực thể ... – gremo