Я хотел бы использовать ObjectSelect для сохранения данных, связанных с событием (Manifestazione), в таблице, которая связывает Manifestazione и TipoEvento (например, Manifestazione "Football Match" - это TipoEvento "Soccer" и "Sport").
Демонстрация: https://i.imgur.com/TxFZUvE.jpg
Manifestazione:
+==================+===============+
| manifestazioneid | title |
+==================+===============+
| 12 | Footbal Match |
+------------------+---------------+
Tipologia:
+==============+==============+==================+
| tipologia_id | tipoeventoid | manifestazioneid |
+==============+==============+==================+
| 182 | 3 | 12 |
+--------------+--------------+------------------+
| 183 | 4 | 12 |
+--------------+--------------+------------------+
TipoEvento:
+===============+=============+
| tipoevento_id | descrizione |
+===============+=============+
| 3 | Soccer |
+---------------+-------------+
| 4 | Sport |
+---------------+-------------+
Параметры ObjectSelect отображаются, но без выбранных значений, и каждый раз, когда я сохраняю форму, я получаю NULL tipoeventoid следующим образом:
+==============+==============+==================+
| tipologia_id | tipoeventoid | manifestazioneid |
+==============+==============+==================+
| 201 | NULL | 12 |
+--------------+--------------+------------------+
| 202 | NULL | 12 |
+--------------+--------------+------------------+
Что может вызвать эту проблему?Спасибо!
Manifestazione
/**
* Manifestazione
*
* @ORM\Table(name="manifestazione")
* @ORM\Entity(repositoryClass="Manifestazione\Entity\Repository\ManifestazioneRepository")
* @ORM\HasLifecycleCallbacks
*/
class Manifestazione {
/**
* @var ArrayCollection @ORM\OneToMany(targetEntity="Manifestazione\Entity\Tipologia", mappedBy="manifestazioneid", orphanRemoval=true, cascade={"persist"})
* @Annotation\Exclude()
*/
protected $tipologie;
/**
* This function adds tipologie at the collection.
*
* @param Collection $tipologie
*/
public function addTipologie(Collection $tipologie)
{
foreach ($tipologie as $tipologia) {
$tipologia->setManifestazioneid($this);
$this->tipologie->add($tipologia);
}
}
Типология
/**
* @ORM\Entity
* @ORM\Entity @ORM\Table(name="tipologia")
*/
class Tipologia
{
/**
* @ORM\Id
* @ORM\Column(type="integer", name="tipologia_id")
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $tipologiaid;
/**
* @ORM\ManyToOne(targetEntity="Manifestazione\Entity\Tipoevento")
* @ORM\JoinColumn(name="tipoeventoid", referencedColumnName="tipoevento_id")
*/
protected $tipoeventoid;
/**
* @ORM\ManyToOne(targetEntity="Manifestazione\Entity\Manifestazione", inversedBy="tipologie")
* @ORM\JoinColumn(name="manifestazioneid", referencedColumnName="manifestazioneid")
*
* @var int
*/
protected $manifestazioneid;
/**
*
* @param field_type $tipoeventoid
*/
public function setTipoeventoid($tipoeventoid)
{
$this->tipoeventoid = $tipoeventoid;
}
/**
*
* @param number $manifestazioneid
*/
public function setManifestazioneid($manifestazioneid)
{
$this->manifestazioneid = $manifestazioneid;
}
TipoEvento
/**
* @ORM\Entity @ORM\Table(name="tipoevento")
*/
class Tipoevento
{
/**
*
* @var integer
* @ORM\Column(name="tipoevento_id", type="integer", nullable=false)
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
protected $tipoeventoid;
/**
*
* @var string
* @ORM\Column(name="descrizione", type="string", length=255, nullable=false)
* @Annotation\Type("Zend\Form\Element\Text")
* @Annotation\Options({"label":"Descrizione:"})
* @Annotation\Attributes({"class":"form-control"})
*/
protected $descrizione;
public function setTipoeventoid($tipoeventoid)
{
$this->tipoeventoid = $tipoeventoid;
return $this;
}
Контроллер:
$x = new Fieldset("Tipologia");
$x->setHydrator(
new DoctrineObject($em, 'Manifestazione\Entity\Tipologia', true)
)->setObject(
new \Manifestazione\Entity\Tipologia()
);
$form->add(
[
'type' => 'DoctrineModule\Form\Element\ObjectSelect',
'name' => 'tipologie',
'required' => false,
'options' => [
'allow_add' => true,
'allow_remove' => true,
'object_manager' => $em,
'target_class' => 'Manifestazione\Entity\Tipoevento',
'property' => 'descrizione',
'label' => 'Tipo evento',
'empty_option' => ':: NONE ::',
'display_empty_item' => true,
'disable_inarray_validator' => true,
'target_element' => $x
],
'attributes' => [
'id' => 'tipologie',
'class' => 'form-control',
'multiple' => true
]
]
);```