2014-11-26 1 views
0

더 나은 이해를 위해 간단히 컨텍스트를 지정합니다.엔터티 양식의 쿼리 빌더가 OneToOne 관계에서 일괄 선택 생성

저는 BankAccount 관계가있는 User 엔티티가 있습니다. 여기

, 내 사용자 클래스 :

/** 
* User 
* 
* @ORM\Table(name="fos_user") 
* @ORM\Entity(repositoryClass="AppBundle\Repository\UserRepository") 
*/ 
class User extends BaseUser 
{ 

    // [...] 


    /** 
    * @ORM\OneToOne(targetEntity="AppBundle\Entity\BankAccount", mappedBy="customer") 
    */ 
    private $bankAccount; 

    // [...] 
} 

그리고 내 은행 계좌 클래스 :

/** 
* BankAccount 
* 
* @ORM\Table(name="bank_account") 
* @ORM\Entity 
* @DoctrineAssert\UniqueEntity({"iban"}) 
* @DoctrineAssert\UniqueEntity({"mandateRef"}) 
* @ORM\HasLifecycleCallbacks 
*/ 
class BankAccount 
{ 
    // [...] 

    /** 
    * @var User 
    * 
    * @ORM\OneToOne(targetEntity="AppBundle\Entity\User", inversedBy="bankAccount") 
    * @ORM\JoinColumn(name="customer_id", referencedColumnName="id", onDelete="CASCADE") 
    */ 
    private $customer; 

    // [...] 
} 

좀 해 orderBy 문을 사용자에 대한 기본 엔티티 유형이 될 것입니다 필터 양식을 만들려면 . 이것은 BankAccount가 각 사용자에 대해, 교리에 의해 선택하는이 많이 발생합니다

->add('customer', null, array(
    'query_builder' => function (UserRepository $er) { 
     return $er->createQueryBuilder('u') 
      ->select('u') 
      ->orderBy('u.firstname, u.lastname, u.username') 
     ; 
    }, 
    'property' => 'fullnameWithUsername', 
)) 

: 나는 그래서 query_builder 옵션을 사용합니다

enter image description here

나는 더 이상 추가 쿼리 빌더를 비활성화하지 않는 경우 선택 그러나 우리는 왼쪽 선택한 사용자에 합류 :

enter image description here

그래서 솔루션 C를 ould는 수동으로 내 쿼리 빌더에 설명 된대로 here으로 조인 문을 추가하는 것이지만 꽤 추악하고 그런데, 나는이 양식에 대해 사용자의 은행 계좌가 절대로 필요하지 않다고 생각합니다.

내 질문은 : Doctrine이 항상 사용자의 은행 계좌 관계를 얻으려고 시도하지 않는다는 것을 어떻게 알 수 있습니까?

참고 : 이미 두 항목 모두에서 모든 가져 오기 옵션을 시도했지만 작동하지 않습니다.

도움 주셔서 감사합니다.

답변

0

OneToMany 관계를 OneToMany로 변경하면 (실제로는 그렇지 않더라도) Doctrine은 은행 계좌 엔티티로드를 중지합니다.

더럽지 만 지금까지는 그 일을 막을 수있는 다른 방법이 없습니다.

+0

도움을 주셔서 감사합니다.하지만 모든 곳에서 참여하는 것보다 더 추악하다고 생각합니다./ – Soullivaneuh

+0

그래, 나도 알아, 이상하지 않아. 다른 옵션은 querybuilder select에서 BankAccount에 가입하는 것입니다. – Richard