2011-10-24 23 views
14

Tôi mới tham gia symfony2 và học thuyết. đây là sự cố khi Tôi xem nó. tôi không thể sử dụng:đọc các đối tượng vẫn tồn tại nhưng chưa được tuôn ra với giáo lý

$repository = $this->getDoctrine()->getRepository('entity'); 
$my_object = $repository->findOneBy($index); 

trên một đối tượng được duy trì, NHƯNG KHÔNG BẮT ĐẦU YET !! tôi nghĩ rằng getRepository đọc từ DB, vì vậy nó sẽ không tìm thấy một đối tượng không đỏ mặt.

câu hỏi của tôi: cách đọc các đối tượng đó được lưu giữ lâu dài (tôi nghĩ chúng ở đâu đó trong "phiên học thuyết") để sử dụng lại chúng trước khi tôi xóa toàn bộ hàng loạt?

mỗi tiểu sử có 256 luồng vật lý.

mỗi cấu hình có 1 plumeOptions bản ghi được gán cho nó.

Trong plumeOptions, tôi có một cartridgeplume là FK cho PhysicalPlume.

mỗi chùm được xác định bởi ID (được tạo tự động) và INDEX (do người dùng tạo).

quy tắc: Tôi cho biết tiểu sử 1 có physical_plume_index số 3 (= chỉ mục) được kết nối với nó.

bây giờ, tôi muốn sao chép tiểu sử với tất cả dữ liệu có liên quan của nó sang một tiểu sử khác.

tiểu sử mới được tạo. 256 luồng mới được tạo và sao chép từ hồ sơ cũ hơn.

tôi muốn liên kết các hồ sơ mới để chỉ số chùm mới 3.

check here: http://pastebin.com/WFa8vkt1

Trả lời

9

Tôi nghĩ bạn có thể muốn có một cái nhìn tại chức năng này:

$entityManager->getUnitOfWork()->getScheduledEntityInsertions() 

Cung cấp cho bạn danh sách các đối tượng thực thể vẫn tồn tại.

Hmm, tôi đã không thực sự đọc câu hỏi của bạn tốt, với ở trên bạn sẽ lấy một danh sách đầy đủ (như một mảng) nhưng bạn không thể truy vấn nó giống như với getRepository. Tôi sẽ cố gắng tìm một cái gì đó cho u ..

+0

thx để trả lời của bạn. kiểm tra phần [chỉnh sửa] của tôi .. – xeon

+0

tôi có thể làm một tuôn ra đôi() bên trong hành động của mình không? tôi không bao giờ thử nó, nhưng chỉ là một câu hỏi .. có thể là một người ngu ngốc?!? tôi tuôn ra các chùm mới được tạo ra, và sau đó tôi tiếp tục lấy các plumeOptions khác và bây giờ tôi có thể liên kết chúng với các chùm mới được tạo ra. làm thế nào để yo tìm thấy ý tưởng đó ...? (hy vọng không ngu ngốc !!) – xeon

+0

Theo như tôi biết bạn có thể gọi flush() bao nhiêu lần bạn muốn. Offcourse tốt nhất-thực hành là để làm điều này càng ít càng tốt để bảo vệ lưu lượng truy cập kết nối. Nhưng nếu bạn cần id từ các thực thể được thêm vào trước đó thì đó là một thực hành tốt. –

3

Tôi nghĩ rằng bạn có thể xem xét vấn đề từ góc độ sai. Doctrine là lớp truy cập cơ sở dữ liệu và lớp kiên trì của bạn. Trách nhiệm của mô hình miền của bạn là cung cấp quyền truy cập vào các đối tượng khi chúng ở trong bộ nhớ. Vì vậy, vấn đề sôi xuống how do you get a reference to an object without the persistance layer?

Bạn tạo đối tượng cần giữ sau này ở đâu? Phương thức/dịch vụ có thể tạo đối tượng trả về một tham chiếu đến bộ điều khiển để nó có thể truyền nó tới nơi khác bạn cần không? Bạn có thể gửi một sự kiện mà bạn lắng nghe ở nơi khác trong ứng dụng của bạn để có được giữ của đối tượng? Theo tôi, Doctrine nên được sử dụng khi khởi động ứng dụng (càng sớm càng tốt), để khởi tạo mô hình miền và khi tắt ứng dụng, để duy trì bất kỳ thay đổi nào đối với mô hình miền trong khi yêu cầu . Để sử dụng một kho lưu trữ để giữ các đối tượng ở giữa một yêu cầu, theo ý kiến ​​của tôi, có lẽ là một mùi mã và bạn nên xem xét cách luồng ứng dụng có thể được tái cấu trúc để loại bỏ nhu cầu đó.

+0

Tôi không chắc mình đồng ý không phải là công việc của Doctrine để cung cấp quyền truy cập. Ít nhất trong Zend, Doctrine được sử dụng như ** Entity Manager ** mà đối với tôi có âm thanh chính xác giống như nơi chứa tham chiếu đến các đối tượng. Sau khi mã đã xác định nó muốn tồn tại và thực thể, lớp kiên trì, Doctrine, nên là duy nhất mà (nói chung) cần phải quan tâm về việc liệu các thực thể có được ghi vào DB hay không. Mặc dù có lẽ trong Zend EntityManager có thể cung cấp một số cách khác để truy cập các thực thể khác với các kho lưu trữ Doctrine, nhưng nếu vậy, tôi không biết theo cách đó là gì. –

+0

Tôi không nghĩ rằng bạn đã hiểu câu hỏi: / – xDaizu

0

Bạn là một vấn đề logic kinh doanh hiệu quả.

Truy vấn xuống Cơ sở dữ liệu một truy vấn tìm kiếm trên đối tượng chưa được xóa, có nghĩa là đưa thêm đối tượng truy vấn lớp DB mà bạn đã có trong phạm vi chức năng của mình.

Cũng lưu ý findOneBy cũng sẽ truy xuất đối tượng khác đã lưu trước đó với cùng các tính năng.

Nếu bạn chỉ cần tìm trong số những đối tượng mới được tạo, bạn nên tạo f.e. chúng trong một biến Session Array và lặp lại chúng với foreach.

Nếu bạn cần kết hợp các mặt hàng đã lưu + một số mặt hàng mới, bạn nên đe dọa 2 phần riêng biệt, một với một foreach, một với truy vấn kho lưu trữ!

Các vấn đề liên quan