2013-03-17 12 views
18

2 farklı varlıktan değerlere ihtiyacım var. Nasıl yapılacağını bilmiyorum. Ben şimdiye kadar bu çalıştı: Doctrine2/Symfony2'deki depomun içinde yabancı depo nasıl alınır?

<?php 

namespace Pond\GeolocBundle\Entity; 

use Doctrine\ORM\EntityRepository; 

/** 
* PondLakeRepository 
* 
* This class was generated by the Doctrine ORM. Add your own custom 
* repository methods below. 
*/ 
class PondLakeRepository extends EntityRepository 
{ 

    public function getSwimsAvailableById($id) 
    { 
     // get the nb of swims of a lake 
     $lake = $this->findOneById($id); 
     $swims = $lake->getSwims(); 

     $repository = $this->getDoctrine() 
          ->getManager() 
          ->getRepository('PondGeolocBundle:User_Lake'); 

     //get the nb of users in a lake 
     $qb = $this->_em->createQueryBuilder(); 
     $qb->select('count(a.id)'); 
     $qb->from('PondGeolocBundle:User_Lake', 'a'); 

     $nbOfUsers = $qb->getQuery()->getSingleScalarResult(); 

     // return the nb of swims available onthis lake 
     $avail = $swims - $nbOfUsers; 
     print_r ($avail); 
    } 

} 

Lütfen yardım çalışmaz. Teşekkür

cevap

34

Sen Doctrine\ORM\EntityRepository#getEntityManager() arayarak EntityManager erişebilirsiniz:

$repository = $this 
    ->getEntityManager() 
    ->getRepository('PondGeolocBundle:User_Lake'); 
+3

Yanıtınızda bunu belirtmediğinizden (ve OP söz konusu konuyu eğriltmediyse), symfony2.2 '-> getEntityManager()' öğesinin kullanılmadığından ve symfony3 ile ilgili olduğunu bildirmek isterim. kaldırılacak. Kullanmak için - -> getManager() 'Eğer zaten symfony2.2 varsa – DonCallisto

+7

@DonCallisto' getEntityManager' bir doktrin yöntemidir ve Symfony2 ile ilgisi yoktur. Symfony2 özel depoları otomatik olarak mı ayarlıyor? – Ocramius

+0

@Ocramius: aslında haklısınız. Yani aynı zamanda symfony2.2 ve doktrini (başka bir sürüm) yükseltmiş ve bunu karıştırmış gibi görünüyor. Aslında aynı günlerde yayınlanmış olan tüm aramaları kaldırmaya başladım ve bir "akıl-kes ve yapıştır" yazdım :) – DonCallisto

0

Eğer bağımlılıkları enjekte diğer iç kullanmak için bir enjekte böylece hizmetler gibi depoları beyan etmek daha isterseniz:

services.yml

services: 
    repository.user_lake: 
     class: Pond\GeolocBundle\Entity\UserLakeRepository 
     factory: [@doctrine, getRepository] 
     arguments: 
      - PondGeolocBundle:User_Lake 

    repository.pond_lake: 
     class: Pond\GeolocBundle\Entity\PondLakeRepository 
     factory: [@doctrine, getRepository] 
     arguments: 
      - PondGeolocBundle:PondLake 
     calls: 
      - [setUserLakeRepository, [@repository.user_lake]] 

PondLakeRepository.php dosyasında, depoyu depolamak için bir özelliğe (setUserLakeRepository) sahip olmanız gerekir (ör. $ UserLakeRepository).

İlgili konular