我通过学生实体以及ActivityStudent实体管理学生的入学情况。 学生一定要上课。所以对于题词,我做了一个CollectionType像这样:
RegistrationType.php
$builder
->add('StudentsNonSubscribe', CollectionType::class, array(
'entry_type' => StudentRegistrationType::class,
'by_reference' => true
));
StudentRegistrationType.php
$builder
->add('id', HiddenType::class)
->add('barCode')
->add('firstname')
->add('name')
->add('phone_number')
->add('Activity', EntityType::class, array(
'class' => Activity::class,
'choice_label' => "name",
'expanded' => true,
'mapped' => false))
->add('Departure', EntityType::class, array(
'class' => ActivityScanPlace::class,
'choice_label' => 'name',
'expanded' => true,
'mapped' => false
))
->add('needEquipement', CheckboxType::class, array('required' => false, 'mapped' => false))
->add('needLesson', CheckboxType::class, array('required' => false, 'mapped' => false))
->add('save', SubmitType::class, array('label' => 'Save'))
;
此处将显示所有学生,我希望仅限于ActivityStudent中存在的学生。 为了更好地理解,我将介绍三个重要的实体: ActivityStudent.php
class ActivityStudent
{
/**
* @var int
*
* @ORM\Column(name="id", type="integer", nullable=false)
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
private $id;
/**
* @var needEquipement
*
* @ORM\Column(name="need_mequipement", type="boolean", nullable=true)
*/
private $needEquipement;
/**
* @var needLesson
*
* @ORM\Column(name="need_lesson", type="boolean", nullable=true)
*/
private $needLesson;
/**
* @var \ActivityScanPlace
*
* @ORM\ManyToOne(targetEntity="ActivityScanPlace")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="id_scan_place", referencedColumnName="id")
* })
*/
private $idScanPlace;
/**
* @var \Student
*
* @ORM\ManyToOne(targetEntity="Student")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="id_student", referencedColumnName="id")
* })
*/
private $idStudent;
/**
* @var \ActivityOccurence
*
* @ORM\ManyToOne(targetEntity="ActivityOccurence")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="id_activity_occurence", referencedColumnName="id")
* })
*/
private $idActivityOccurence;
}
Student.php
class Student{
/**
* @var int
*
* @ORM\Column(name="id", type="integer", nullable=false)
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
private $id;
/**
* @var int
*
* @ORM\Column(name="bar_code", type="string", nullable=false)
*/
private $barCode;
/**
* @var \DateTime
*
* @ORM\Column(name="born_date", type="date", nullable=false)
*/
private $bornDate;
/**
* @var string
*
* @ORM\Column(name="name", type="string", length=125, nullable=false)
*/
private $name;
/**
* @var string
*
* @ORM\Column(name="firstname", type="string", length=125, nullable=false)
*/
private $firstname;
/**
* @var bool
*
* @ORM\Column(name="sex", type="boolean", nullable=false)
*/
private $sex;
/**
* @var string|null
*
* @ORM\Column(name="email", type="string", length=100, nullable=true)
*/
private $email;
/**
* @var string|null
*
* @ORM\Column(name="phone_number", type="string", length=25, nullable=true)
*/
private $phone_number;
/**
* @var \Address
*
* @ORM\ManyToOne(targetEntity="Address")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="id_address", referencedColumnName="id")
* })
*/
private $idAddress;
/**
* @var \Class
*
* @ORM\ManyToOne(targetEntity="Class_")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="id_class_", referencedColumnName="id")
* })
*/
private $idClass;
/**
* @var \Company
*
* @ORM\ManyToOne(targetEntity="Company")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="id_company", referencedColumnName="id")
* })
*/
private $idCompany;}
Class_.php
class Class_
{
/**
* @var int
*
* @ORM\Column(name="id", type="integer", nullable=false)
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
private $id;
/**
* @var int
*
* @ORM\Column(name="level", type="integer", nullable=false)
*/
private $level;
/**
* @var string
*
* @ORM\Column(name="name", type="string", length=25, nullable=false)
*/
private $name;
/**
* @var \Day
*
* @ORM\ManyToOne(targetEntity="Day")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="id_day", referencedColumnName="id")
* })
*/
private $idDay;
/**
* @var \Teacher
*
* @ORM\ManyToOne(targetEntity="Teacher")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="id_teacher", referencedColumnName="id")
* })
*/
private $idTeacher;
/**
* @var \Student
*
* @ORM\OneToMany(targetEntity="Student", mappedBy="idClass", cascade="all")
* @ORM\OrderBy({"name" = "ASC"})
*/
private $students;
public function __construct() {
$this->students = new \Doctrine\Common\Collections\ArrayCollection();
}
public function addStudent(Student $student)
{
$this->students[] = $student;
$student->setIdClass($this->getId());
return $this;
}
public function setStudents($students)
{
$this->students = $students;
}
}
只需要一种不向ActivityStudent展示学生的方法,我也不知道如何从CollectionType中做到这一点。 如果您有完整的答案甚至是曲目,我会很乐意接受。先感谢您 ! :D
答案 0 :(得分:0)
我添加了addEventListener(FormEvents::PRE_SET_DATA)
工作完成了。我使用了此页面:symfony的官方文档:https://symfony.com/doc/current/form/events.html
我是那样做的:
在buildForm内部:$builder->addEventListener(FormEvents::PRE_SET_DATA, function (FormEvent $event) {....}
您需要获取表格和数据。在这里,我得到了ID,并进行了查询。
$ form = $ event-> getForm(); $ id = $ event-> getData()-> getId(); $ query = .....;
我执行了getOnOrNullResult()
if($result == null){
//TODO : $form .....
}