Имея эту схему:
Я бы хотел сделать такую форму
Я не знаю, как мне построить форму.
Роль здесь для того, чтобы сказать, какова роль работника.
Компания
class Company
{
/**
* @ORM\Column(type = "string", length=45, nullable=true)
*/
private $name;
/**
* @ORM\OneToMany(targetEntity = "CompanyPerson", mappedBy = "company")
*/
private $companypersons;
}
Человек
class Person
{
/**
* @ORM\Column(type = "string", length=45, nullable=true)
*/
private $name;
/**
* @ORM\OneToMany(targetEntity = "CompanyPerson", mappedBy = "person", cascade = {"persist"})
* @var ArrayCollection
*/
private $companypersons;
}
Положение дел
class Status
{
/**
* @ORM\Column(type = "string", length=45, nullable=true)
*/
private $libelle;
/**
* @ORM\OneToMany(targetEntity = "CompanyPerson", mappedBy = "statut")
*/
protected $companypersons;
}
КомпанияЧеловек
class CompanyPerson
{
/**
* @ORM\Column(type = "datetime", nullable=true)
*/
private $dateAdded;
/**
* @ORM\ManyToOne(targetEntity = "Company", inversedBy = "companypersons",
cascade = {"persist"})
*/
private $company;
/**
* @ORM\ManyToOne(targetEntity = "Person",
inversedBy = "companypersons", cascade = {"persist"})
*/
private $person;
/**
* @ORM\ManyToOne(targetEntity = "Status",
inversedBy = "companypersons", cascade = {"persist"})
*/
private $status;
/**
* @ORM\ManyToOne(targetEntity = "CompanyPerson", inversedBy = "childrens")
*/
private $parent;
/**
* @ORM\OneToMany(targetEntity = "CompanyPerson", mappedBy = "parent")
*/
private $childrens;
public function __construct(Company $companay= null, Person $person =
null, CompanyPerson $parent = null, Status $status = null)
{
$this->companay = $companay;
$this->person = $person;
$this->parent = $parent;
$this->status = $status;
$this->childrens = new ArrayCollection();
}
}
Я работал над встроенной формой с коллекциями, но я не могу создать эту форму, потому что это не очень сложно для меня.




У вас есть рациональные проблемы при составлении карты. вы должны использовать шаблон родитель-потомок внутри Person, а не CompanyPerson. CompanyPerson здесь - это совместное предприятие. Он нужен для того, чтобы сохранять такие вещи, как:
$dateAdded: дата установления связи между Company, Person и Status.Человек
class Person
{
/**
* @ORM\Column(type = "string", length=45, nullable=true)
*/
private $name;
/**
* @ORM\OneToMany(targetEntity = "CompanyPerson", mappedBy = "person", cascade = {"persist"})
* @var ArrayCollection
*/
private $companypersons;
/**
* @ORM\ManyToOne(targetEntity = "Person", inversedBy = "childrens")
*/
private $parent;
/**
* @ORM\OneToMany(targetEntity = "Person", mappedBy = "parent")
*/
private $children;
}
Обратите внимание, что children следует хранить без s, так как он уже во множественном числе.
Также не забывайте использовать операции cascade для определения отображения на обратной стороне ассоциации. Так что
class CompanyPerson
{
/**
* @ORM\ManyToOne(targetEntity = "Company", inversedBy = "companypersons", cascade = {"persist"})
*/
private $company;
/**
* @ORM\ManyToOne(targetEntity = "Person", inversedBy = "companypersons", cascade = {"persist"})
*/
private $person;
}
должно быть
class CompanyPerson
{
/**
* @ORM\ManyToOne(targetEntity = "Company", inversedBy = "companypersons")
*/
private $company;
/**
* @ORM\ManyToOne(targetEntity = "Person", inversedBy = "companypersons")
*/
private $person;
}
Чтобы обойти так называемую сложную форму! вы можете использовать атрибут настройки mapped=false в своих полях. используя это, вы можете сообщить Symfony, что это поле не отображается на свойство целевой сущности вашей формы.
В вашем случае у вас есть форма CompanyType (с Company в качестве целевого объекта) и вы хотите создать все это за один раз! Таким образом, вы можете добавить несопоставленные поля в свою форму и захватить тему внутри вашего контроллера и проанализировать тему по своему усмотрению.
Используя этот метод, вы должны сами создавать совместные объекты (например, Company-Person) (опять же внутри вашего контроллера).
Я ответил на ваш вопрос. Пожалуйста, прочтите его внимательно и используйте Официальную документацию Symfony, чтобы реализовать это самостоятельно. Если вам нужна реализация, никто здесь, в Stack Overflow, не реализует ваши потребности.
Привет, спасибо, мутч, я вчера прочитал ваш ответ, но я думаю, потому что у меня нет высокого уровня в symfony, но эта форма для меня настоящая проблема Я изменил объекты, как вы сказали, но я заблокирован для всех форм напишите об этом и как я могу это кодировать. Я чувствую себя там абсолютно нулевым: - /