2012-10-15 15 views
5

Doctrine 2 có chức năng upsert được tích hợp sẵn không? Nó không có vẻ, nhưng tôi đã không thể tìm thấy một câu trả lời có hoặc không dứt khoát.Tìm hoặc tạo (upsert) chức năng trong Doctrine 2

Nếu có, tôi tất nhiên sẽ quan tâm để xem ví dụ và/hoặc một số tài liệu.

Trả lời

3

Tôi tin rằng tôi đã tìm thấy câu trả lời. Kể từ hôm nay (15/10/2012), có một vấn đề "add upsert support" mở cho Doctrine. Tôi cho rằng vé này sẽ không mở được nếu Doctrine 2 có hỗ trợ upsert, vì vậy tôi đoán có câu trả lời dứt khoát của tôi.

+0

Tôi có thể thấy có vé nhưng không thể tìm thấy bất kỳ tài liệu nào? Bạn đã? –

+0

@DimitryK xem câu trả lời của tôi, nó đã được thực hiện :) –

4

Upsert đã có trong Doctrine.

Sử dụng trình tạo truy vấn, bạn phải thiết lập findAndUpdate()returnNew() nếu bạn muốn quay trở lại tài liệu. Đặt upsert() và bạn đã sẵn sàng.

Ví dụ:

$documentMannager->createQueryBuilder('App\Domain') 
->findAndUpdate() 
->returnNew() 
->field('_id')->equals($id) 
->field('page')->equals($page) 
->field('count')->inc(1) 
->upsert() 
->getQuery() 
->execute(); 

Đây là cách tôi thực hiện một mô hình xô.

+0

Cảm ơn bạn @Guilherme Tôi sẽ kiểm tra cách tiếp cận này và sẽ quay lại với bạn với kết quả của tôi! –

+3

Chỉ áp dụng cho ODM và không phải ORM. – Im0rtality

+0

Như @ Im0rtality nói, nó chỉ có thể được sử dụng trong ngữ cảnh của Mongo chứ không phải của cơ sở dữ liệu SQL. – fjcero