Я управляю зачислением студентов в студенческую организацию, а также в группу 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