Symfony 2.1에서 optgroups로 선택 상자를 표시하려고합니다. 내 개체 트리입니다 : 클라이언트가 프로젝트를 진행하고, 프로젝트는 부품 (Part->getProject()->getClient()
)Symfony2 : 엔티티 필드에서 group_by 옵션 사용
내 선택 상자이 방법으로 표시 할이 있습니다
이<select>
<optgroup>Client name
<option>Part name</option>
<!-- ... -->
</optgroup>
<!-- ... -->
</select>
심포니 문서가 많은 도움하지 않습니다.
$this->createFormBuilder()
->add('part','entity',array(
'class' => 'SGLFLTSPartBundle:Part',
'property' => 'name',
'query_builder' => function (\SGL\FLTS\PartBundle\Entity\PartRepository $er) {
return $er->createQueryBuilder('p');
}))
->getForm();
가 어떻게 클라이언트 이름을 표시합니다 GROUP_BY 옵션을 추가하려면 : 내 이 (GROUP_BY 옵션없이) 양식 빌더를 작업하는 날은 간단한 선택 준다? 지금까지 내가 또한 프로젝트의 이름을 표시 만 OPTGROUP로, 운이 시도하지했습니다
'group_by' => 'project.client.name'
'group_by' => 'project.client'
'group_by' => 'ppc.name' // the DQL table alias
모든
는 PHP 오류를 줄 시도했다 :'group_by' => 'project'
'group_by' => 'project.name'
'group_by' => 'project.id' // throws no error, giving me <optgroup label="1"> ...
및 추가 프로젝트를 시도/클라이언트는 createQueryBuilder에서 조인합니다.
$er->createQueryBuilder('p')->select('p, pp')->leftJoin('p.project','pp');
$er->createQueryBuilder('p')->select('p, pp.name')->leftJoin('p.project','pp')
// wrong
고마워요!
감사합니다. 'group_by'옵션을 추가하여 업데이트했습니다 ('속성'을 작성했습니다). 또한 "엔터티를 찾을 수 없습니다."라는 오류가 발생했습니다. 쿼리 내부에서 조인하지 않아도됩니다. – sglessard
''group_by '=>'clientName'' 옵션 뒤에있는 아이디어는 다음과 같습니다. 120 행의 ObjectChoiceList 클래스는이 객체 속성 (또는 클래스 메소드)을 사용하여 객체를 그룹화합니다. DQL의 조인에서 직접 클라이언트의 제목을 가져올 수 없기 때문에이 값을 반환하는 getClientName 메서드가 필요했습니다. DQL에서 관련 개체를 조인하면 관련 개체가 이미 초기화되어 있어야하며 컬렉션의 각 엔터티에 대해 DB에 대한 호출이 필요하지 않습니다. 'property' 옵션은 여전히'group_by'이어야합니다. 내 사례는 환경에 맞게 변경해야합니다. – Iain
네, 이해합니다.그럼에도 불구하고'createFormBuilder' 예제 배열은 이전처럼 수정해야합니다 :' 'property'=> 'name', 'group_by'=> 'clientName', ' – sglessard