У меня есть два отношения OneToMany между двумя объектами: Серия —> Эпизод и Эпизод —> Musique, которые следуют:
class Serie{
........
/**
* @ORM\OneToMany(targetEntity="Episode", mappedBy="serieId")
* @ORM\OrderBy({"numeroE" = "ASC"})
*/
private $episodes;
........
}
class Episode{
........
/**
* @var integer
*
* @ORM\ManyToOne(targetEntity="Serie", inversedBy="episodes")
* @ORM\JoinColumn(name="serie_id", referencedColumnName="id")
*/
private $serieId;
/**
* @ORM\OneToMany(targetEntity="Musique", mappedBy="episodeId")
* @ORM\OrderBy({"min" = "ASC", "sec" = "ASC"})
*/
private $musiques;
}
class Musique{
........
/**
* @ORM\ManyToOne(targetEntity="Episode", inversedBy="musiques")
* @ORM\JoinColumn(name="episode_id", referencedColumnName="id")
*/
private $episodeId;
........
}
В моем My\ContentBundle\Form\Type\MusiqueType, который представляет собой форму сущности Musique, у меня есть:
class MusiqueType extends AbstractType{
/**
* @param FormBuilderInterface $builder
* @param array $options
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('episodeId', 'entity', array(
'class' => 'MyContentBundle:Episode' ,
)
->add('serieId', 'entity', array(
'class' => 'MyContentBundle:Serie' ,
'mapped' => false
)
;
}
}
На мой взгляд, мне нужно будет отобразить поле “episodeId”. Однако, поскольку в моей базе содержится около тысячи эпизодов, я хотел бы отображать в этом поле только эпизоды, принадлежащие выбранной серии.
Я собирался использовать некоторые действия ajax для этого, но мне было интересно: существует ли более простой способ сделать это?
Спасибо !
Вы можете быть более конкретным в создании формы, добавив к ней пользовательский запрос:
use Doctrine\ORM\EntityRepository;
// ...
$builder->add('users', 'entity', array(
'class' => 'AcmeHelloBundle:User',
'query_builder' => function(EntityRepository $er) {
return $er->createQueryBuilder('u')->orderBy('u.username', 'ASC');
},
));
Более подробную информацию см. на странице ” Тип поля объекта документа SF2″.