![](/img/trans.png)
[英]sonata_type_model / symfony form one to many relationship not saving
[英]sonata: Dealing with sonata_type_model (one-to-many)
1-我有一個實體:
/**
* @ORM\Entity
* @ORM\Table(name="employee_medical_file")
*/
class EmployeeMedicalService extends BaseEntity
{
//
// Some
// Fields
//
/**
* @Assert\NotBlank
* @ORM\ManyToOne(targetEntity="PersonnelBundle\Entity\Lookup\Lookup")
* @ORM\JoinColumn(name="medical_service_id", referencedColumnName="id")
*/
private $medicalService;
//
// getters
// & setters
//
2-另一個實體:
/**
* @ORM\Entity
* @ORM\Table(name="lookup")
* @UniqueEntity(fields="name")
*/
class Lookup extends BaseEntity
{
// const ...
const TYPE_MEDICAL_SERVICE = 'medical_service';
// more constants ...
public function __construct($type)
{
$this->type = $type;
}
//
// Some Fields
//
/**
* @var string
* --stuff--
*/
private $name;
/**
* @var string
*
* @ORM\Column(name="type", type="string", length=50)
* @Assert\NotBlank
*/
private $type;
//getters
// &setters
現在在
protected function configureFormFields(\Sonata\AdminBundle\Form\FormMapper $formMapper)
{
$msquery = $this->getModelManager()
->getEntityManager('PersonnelBundle:Lookup\Lookup')
->createQueryBuilder();
$msquery->select('l')->from('PersonnelBundle:Lookup\Lookup', 'l')->where('l.type = :type')
->orderBy('l.name', 'ASC')
->setParameter('type', 'medical_service');
$formMapper
->add(..)
->add('medicalService', 'sonata_type_model', array(
'label' => 'personnel.employee.medical_service.form.medical_service',
'property' => 'name',
'placeholder' => '',
'required' => false,
'query' => $msquery,
))
->add(..)
;
}
當我嘗試從EmployeeMedicalService Admin表單中添加新的醫療服務時,我需要從EmployeeMedicalService Admin表單中添加新查找表(醫療服務)的表單,該字段的Type值設置為'medical_service'。如果“ 類型”設置為NULL,則添加不帶值的查找
這是
protected function configureFormFields(FormMapper $formMapper)
{
$formMapper
->add('name', 'text', array(
'label' => 'personnel.lookup.form.name'
))
->add('type', 'hidden', array(
'label' => 'personnel.lookup.form.type',
))
;
}
如果檢查ajax請求的彈出表單,則會注意到額外的查詢參數,例如pcode
。 您可以檢查此參數是否存在並且等於EmployeeMedicalServiceAdmin
管理員類代碼,然后將lookup
類型設置為medical_service
。
UPDATE
在getNewInstance()
方法中添加以下邏輯之王:
public function getNewInstance()
{
$type = isset($_GET['pcode']) ? 'medical_service' : '';
$instance = new \PersonnelBundle\Entity\Employee\EmployeeMedicalService($type);
return $object;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.