2012-08-07 16 views
15

Şu anda Symfony2'yi nasıl kullanacağımı öğreniyorum. Doktrin'i nasıl kullanacaklarını açıkladıkları noktaya geldim. varlık yöneticisi kullanılmaz Symfony2'de Varlık Yöneticisi ne zaman kullanılmalıdır

$em = $this->getDoctrine()->getEntityManager(); 
$products = $em->getRepository('AcmeStoreBundle:Product') 
     ->findAllOrderedByName(); 

ve diğer örneklerde

: bazen varlık yöneticisini kullanarak verilen örneklerde

$product = $this->getDoctrine() 
     ->getRepository('AcmeStoreBundle:Product') 
     ->find($id); 

Yani aslında almadan ilk örnek çalıştı varlık yöneticisi:

ve aynı sonuçları aldınız.

Peki, ne zaman gerçekte varlık yöneticisine ihtiyacım var ve ne zaman bir kerede depoya gitmeye ne zaman gerek yok?

cevap

28

ControllergetDoctrine()'a bakıldığında,'un bir örneğindeki $this->get('doctrine'). Sicil sağlamaktadır:

Böylece $this->getDoctrine()->getRepository()$this->getDoctrine()->getEntityManager()->getRepository() eşittir dönen getRepository()

  • getRepository() sağlar Doctrine\ORM\EntityManager, dönüyor.

    $repository = $this->getDoctrine()->getRepository('AcmeStoreBundle:Product'); 
    $product = $repository->find(1); 
    

    Ya da daha: Sadece veri alıyorsanız

    $em = $this->getDoctrine()->getEntityManager(); 
    
    $em->persist($myEntity); 
    $em->flush(); 
    

    , sadece depo alabilirsiniz: Eğer inat veya kurumun kaldırmak istediğinizde

    Varlık yöneticisi yararlıdır Özel depoları kullanıyorsanız, IDE:

    ürününüzden otomatik tamamlama özelliği alabileceğiniz gibi, bir denetleyici işlevine getRepository() sarın.
    /** 
    * @return \Acme\HelloBundle\Repository\ProductRepository 
    */ 
    protected function getProductRepository() 
    { 
        return $this->getDoctrine()->getRepository('AcmeHelloBundle:Product'); 
    } 
    
  • +0

    Zaten 'flush()' kullanırken varlık yöneticisini kullanmam gerektiğini biliyordum. Ayrıca 'getProductRepository()' işlevini kullanma fikri, yararlı olabilecek bir şeydir! –

    +1

    @MatsRietdijk yardım etmekten memnun! Otomatik tamamlama için "BaseController" 'daki özel fonksiyonlarda $ this-> (' some service ') 'ü wrap ediyorum. – gremo

    +1

    ' AcmeStoreBundle: Product 'konumunun neresinde bulunur? Symfony Uygulamam. –

    2

    getDoctrine()->getRepository()'un getDoctrine()->getEntityManager()->getRepository() için bir kısayol olduğunu düşünüyorum. Kaynak kodu kontrol etmedi, ama bana oldukça mantıklı geliyor.

    +0

    Teşekkürler, bir kısayol gibi görünüyor. –

    0

    Varlık yöneticisi ile birden çok işlem yapmayı planlıyorsanız (bir havuz almak, bir varlığı sürdürmek, yıkamak, vb.), Önce varlık yöneticisine gidin ve bir değişkende saklayın. Aksi takdirde, depoyu varlık yöneticisinden alabilir ve depo sınıfında istediğiniz herhangi bir yöntemi tek bir satırda arayabilirsiniz. Her iki yol da işe yarayacak. Bu sadece kodlama stili ve ihtiyaçlarınız.

    İlgili konular