2015-01-31 15 views
10

Làm cách nào tôi có thể kiểm tra giá trị đã cho đó trong trường Doctrine Collection (quan hệ ManyToMany)?Doctrine2: kiểm tra xem giá trị tồn tại trong Bộ sưu tập Doctrine

Ví dụ tôi cố gắng:

$someClass = $this-> 
      getDoctrine()-> 
      getRepository('MyBundle:MyClass')-> 
      find($id); 

if (!$entity->getMyCollectionValues()->get($someClass->getId())) { 

    $entity->addMyCollectionValue($someClass); 

} 

Nhưng đó là tất nhiên không đúng. Vì vậy, làm thế nào để tránh cho các phím trùng lặp?

Trả lời

23

Bạn có thể làm:

$object = $this->getDoctrine()->getRepository('MyBundle:MyClass')->find($id); 

if (!$entity->getMyCollectionValues()->contains($object)) { 
    $entity->addMyCollectionValue($object); 
} 

Bạn có thể nhìn vào các chức năng có sẵn của Học thuyết ArrayCollection trong http://www.doctrine-project.org/api/common/2.1/class-Doctrine.Common.Collections.ArrayCollection.html

+0

Oh, cảm ơn! Nó hoạt động tốt! – spiil

+2

Có cách kiểm tra Doctrine mà không thực hiện một truy vấn khác ngay từ đầu để tìm đối tượng mà chúng tôi đang tìm kiếm, khi chúng tôi đã có id của đối tượng đó không? Tại sao tôi không thể yêu cầu bộ sưu tập nếu nó có mục nhập với id đó? Tôi không đồng ý với việc thêm một truy vấn khác cho điều đó. – grantwparks

+1

@grantwparks bạn có thể đặt chứa() bên trong phương thức thêm nếu bạn luôn muốn đảm bảo rằng kiểm tra xảy ra trước khi thêm. – TheGremlyn

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