2016-03-20 3 views
0

Symfony 2.6 ve twig kullanarak: Veritabanımdaki birçok kullanıcı tarafından sağlanan yanıtları aldım. Belirli bir kullanıcı için hepsini düzenleyebilmeleri için onları düzenleyen bir form oluşturmak istiyorum.Sorgulanan varlıklar koleksiyonundan oluşturma

Aşağıdaki kod ile bu yanıtları almak:

Denetleyici:

$responses = $this->getDoctrine()->getRepository('AppBundle:Response') 
->findBy(
    array('user' => $usr, 
     'response' => 1, 
     'response' => 2 
    ), 
    array('id' => 'ASC') 
); 

$form = $this->createForm(new ActionType, $responses)->createView(); 

ActionType:

public function buildForm(FormBuilderInterface $builder, array $options) 
{ 
    $builder 
     ->add('check', 'entity', array(
      'required' => false, 
      'class' => 'AppBundle:Response', 
      'property'  => 'id', 
      'property_path' => '[id]', 
      'multiple'  => true, 
      'expanded'  => true, 
     )) 
    ; 
} 

public function setDefaultOptions(OptionsResolverInterface $resolver) 
{ 
    $resolver->setDefaults(array(
     'data_class' => null, 
     'csrf_protection' => false 
    )); 
} 

This answer istediğim tam olarak ne yapar, ama çalışma alınamıyor . Oluşturulan form çok büyük: Yanıt tablosunun tamamını alıyor ... Neden bir ipucunuz var?

cevap

0

Sadece doktrin tembel yüklemelerine güveniyorsanız, tüm ilgili varlıklarınızı yükleyecektir, hem iyi hem de kötüdür.

kullanıcı için yanıtlar şöyle querybuilder ile veri alıp filtrelemek için: özel olarak sulu istediğiniz varlıkları seçme

$responses = $queryBuilder->select('u', 'r') 
       ->from('YourBundle:User', 'u') 
       ->join('u.responses', 'r') 
       ->where('u.id = :userId') 
       ->orderBy('u.id', 'ASC') 
       ->setParameter('userId', $yourUserEntity->getId()) 
       ->getQuery()->getResult(); 

Yukarıda olduğu gibi, mevcut tüm verilerin bir tembel yük önler.