2015-04-28 3 views
2

Сообщение об ошибке выглядит следующим образом:Форма Symfony для ManyToMany Entity с помощью строитель пользовательский запрос

[Semantical Error] line 0, col 58 near 'events = :eventId': Error: Invalid PathExpression. StateFieldPathExpression or SingleValuedAssociationField expected.

Который является правильным, так как это ManyToMany присоединиться, с присоединиться к столу. Но как мне загрузить эти объекты?

Проблема в форме деятельности (в конце). Я пытаюсь загрузить город, которому назначено подключение ManyToMany к определенному событию. кодекс говорит больше, чем 1000 слов, так что посмотрим (:.

Так у меня есть три сущности в приложении Symfony Event, Town, Activity

Event выглядит следующим образом:

// ... 

/** 
* @var string 
* 
* @ORM\Column(name="name", type="string", length=255) 
* @Gedmo\Versioned 
*/ 
private $name; 

/** 
* @ORM\ManyToMany(targetEntity="Town", inversedBy="events") 
* @ORM\JoinTable(name="Events_to_Towns") 
**/ 
private $towns; 

/** 
* @ORM\OneToMany(targetEntity="Activity", mappedBy="event") 
*/ 
private $activitys; 

// ... 

Town выглядит следующим образом:

// ... 

/** 
* @var string 
* 
* @ORM\Column(name="name", type="string", length=255) 
* @Gedmo\Versioned 
*/ 
private $name; 

/** 
* @ORM\ManyToMany(targetEntity="Event", mappedBy="towns") 
*/ 
private $events; 

/** 
* @ORM\OneToMany(targetEntity="Activity", mappedBy="town") 
*/ 
private $activitys; 

// ... 

Activity выглядит следующим образом:

// ... 

/** 
* @var string 
* 
* @ORM\Column(name="name", type="string", length=255) 
* @Gedmo\Versioned 
*/ 
private $name; 

/** 
* @ORM\ManyToOne(targetEntity="Town", inversedBy="activitys") 
* @ORM\JoinColumn(name="town_id", referencedColumnName="id") 
*/ 
private $town; 

/** 
* @ORM\ManyToOne(targetEntity="Event", inversedBy="activitys") 
* @ORM\JoinColumn(name="event_id", referencedColumnName="id") 
*/ 
private $event; 

// ... 

Это все работает. Однако проблема заключается в форме для Activity, когда я хотел бы назначить Town или несколько. Я пытаюсь загружать только города, которые сопоставляются с событием.

// ... 

public function __construct($eventId) { 
    $this->_eventId = $eventId; 
} 

public function buildForm(FormBuilderInterface $builder, array $options) 
{ 
    $eventId = $this->_eventId; 

    $builder 
     // ... 

     // this work's as expected! 
     ->add('category', 'entity', array(
      'required'  => true, 
      'label'   => 'Kategorie', 
      'class'   => 'FooEventBundle:Category', 
      'property'  => 'name', 
      'query_builder' => function(\Foo\EventBundle\Entity\CategoryRepository $er) use ($eventId) { 
       return $er->createQueryBuilder('c') 
        ->select('c') 
        ->where('c.event = :eventId') 
        ->setParameter('eventId', $eventId) 
       ; 
      } 
     )) 

     // here's the problem! 
     ->add('town', 'entity', array(
      'required'  => true, 
      'label'   => 'Stadt', 
      'class'   => 'FooEventBundle:Town', 
      'property'  => 'name', 
      'query_builder' => function(\Foo\EventBundle\Entity\TownRepository $er) use ($eventId) { 
       return $er->createQueryBuilder('t') 
        ->select('t') 
        ->where('t.events = :eventId') 
        ->setParameter('eventId', $eventId) 
       ; 
      } 
     )) 

     // ... 

    ; 
} 

// ... 

ответ

2

Что-то вроде:

  $er->createQueryBuilder('t') 
      ->select('t') 
      ->join('t.events', 'e') 
      ->where('e.id = :eventId') 
      ->setParameter('eventId', $eventId) 

Должно работать.

+0

Именно то, что я искал. СПАСИБО – wawa

Смежные вопросы