Doctrine 2 hydrácia (naplnenie a prepísanie) existujúcej entity z Nette\Forms
- iNviNho
- Člen | 352
Ahojte,
Mám entitu Contact. Pri hydrácií tejto entity z hodnot formulára všetko prebehne v poriadku ak dodám entitu ako new…
<?php
$v = $form->getValues(TRUE);
$this->hydratorService->fromArray($v, new \App\Entities\Contact);
?>
Akonáhle chcem použiť hydrátor na už existujúcu entitu Contact
<?php
$contact = $this->hydratorService->fromArray($v, $this->contactService->getById($v["contact_id"]));
?>
..tak dostávam error
Warning
Illegal offset type in isset or empty
Tento error vzniká určite kvôli asociáciám, ktoré entita Contact obsahuje, napr. mails pri vytvorení entity sú ArrayCollection, ale ak ju vrátim z DB, tak už obsahuje PersistentCollection a tam podľa mňa nastáva problém a hydrácia zlyháva
<?php
/**
* @ORM\Entity
*/
class Contact extends \Nette\Object {
use \Kdyby\Doctrine\Entities\MagicAccessors;
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue
*/
protected $id;
/** ...... */
/**
* @ORM\ManyToMany(targetEntity="E_mail", inversedBy="contacts", cascade={"persist"})
* @ORM\JoinTable(name="contact_e_mail")
*/
protected $mails;
public function __construct() {
$this->mails = new ArrayCollection();
}
?>
Čiže moja otázka by bola, či je možné nejako už načítanú entitu zmeniť na to, aby obsahovala namiesto PeristentCollection ⇒ ArrayCollection. Napadá ma toto, ale neviem, nie je to moc sexy
<?php
// EDIT ani toto nefunguje ...
$contact->setMails($contact->getMails()->getValues());
?>
Editoval iNviNho (29. 1. 2016 13:06)
- artemevsin
- Člen | 61
ukaž jak vypadá hydratorService::fromArray
Editoval artemevsin (29. 1. 2016 14:08)
- iNviNho
- Člen | 352
artemevsin napsal(a):
ukaž jak vypadá hydratorService::fromArray
<?php
use DoctrineModule\Stdlib\Hydrator\DoctrineObject as Hydrator;
/**
* @var Hydrator
*/
public $hydrator;
public function __construct(\Kdyby\Doctrine\EntityManager $em) {
$this->hydrator = new Hydrator($em);
}
$this->hydrator->hydrate($data, $entity);
?>